URL-адрес перенаправления CodeIgniter после недопустимого URI удалить символ - PullRequest
0 голосов
/ 02 июля 2018

Я работаю в проекте CodeIgnitier. У нас много данных с неправильной конфигурацией, поэтому многие URL содержат символы Unicode и другие нежелательные символы. Очистка всех данных займет несколько месяцев, и я хочу избежать 400 ошибок из-за allow_uri_chars . Ресурсы доступны, если я удалю нежелательные символы. Я хотел бы автоматически удалить эти символы. Я пытаюсь поместить следующий код в application / config / rout.php:

if ($this->uri->total_segments()) {
  foreach (range(1, $this->uri->total_segments()) as $i) {
      if ($this->uri->segment($i)) {
          $this->uri->segments[$i] = preg_replace("#[^".$this->config->item('permitted_uri_chars')."]#i", "", $this->uri->segments[$i]);
      }
  }
}

Но я получаю ошибку 400. CodeIgniter контролирует URL-адреса перед тем, как передать маршруты. Php. Где я могу разместить свой код, чтобы избежать 400 ошибок? Могу ли я сделать это в хуке pre_system?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Я использую решение, чтобы избежать 301 перенаправлений. Я не хочу, чтобы Google ненавидел меня, потому что я отправляю карты сайта с несколькими 301 перенаправлениями. Я разрешаю некоторые символы, но удаляю их в файле маршрутов.

В моем файле config.php:

$config['permitted_removed_uri_chars'] = '\',ß';
$config['permitted_uri_chars'] = 'a-z 0-9%.:_\-+&'.$config['permitted_removed_uri_chars'];

В моих файлах rout.php:

if ($this->uri->total_segments()) {
    foreach (range(1, $this->uri->total_segments()) as $i) {
        if ($this->uri->segment($i)) {
            $this->uri->segments[$i] = preg_replace("#[".$this->config->item('permitted_removed_uri_chars')."]#i", "", $this->uri->segments[$i]);
        }
    }
}
0 голосов
/ 02 июля 2018

Пожалуйста, поймите этот код и поместите сверху в ваш заголовочный файл. Вы можете управлять своим URL-адресом, как хотите.

$id = $this->uri->segment(3);

if($id)
{
    $url = str_replace('/'.$id,"",$_SERVER['REQUEST_URI']);
} else {
    $url = $_SERVER['REQUEST_URI'];
}

$pattern = '/([A-Z]+)/';
if(preg_match($pattern, $url))
{
    $new_url = strtolower($url);
    Header( 'HTTP/1.1 301 Moved Permanently' );
    if($id){
        Header( 'Location: ' . $new_url.'/'.$id );
    } else {
        Header( 'Location: ' . $new_url );
    }
    exit;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...