Как переписать URL-адреса, чтобы удалить index.php И заставить строчные буквы с codeigniter? - PullRequest
0 голосов
/ 08 апреля 2011

У меня проблемы с выполнением обоих этих действий одновременно с .htaccess.

Удаление index.php работает, но попытка добавить принудительную строчную букву продолжает выдавать ошибку 500. Я использую codeigniter. Любая помощь приветствуется!

вот мой код .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1

RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

Ответы [ 2 ]

1 голос
/ 05 января 2012

Предлагаемый код php не работает, если вы просто пытаетесь ввести строчные буквы. Ниже приведен правильный код php.

$url = $_SERVER['REQUEST_URI'];
$pattern = '/([A-Z]+)/';

if(preg_match($pattern, $url)) {
    $new_url = strtolower($url);

    Header( 'HTTP/1.1 301 Moved Permanently' );
    Header( 'Location: ' . $new_url );
    exit;
}

// your code here

Обсуждение найдено здесь Принудительное использование строчных букв .htaccess

0 голосов
/ 08 апреля 2011

Это потому, что это невозможно, позвольте мне объяснить.

  1. Удаление index.php по-прежнему отправляет все запросы в index.php / yadda / yadda, поэтому в запрошенном uri все еще есть index.php, даже если вы его не видите или не добавляете в URL.
  2. Перенаправление (инициируемое вторым правилом перезаписи) обнуляет раздел индекса, поэтому вы получите mysite.com/index.php/lowercase/

НО кроме всего этого RewriteMap может быть объявлен только в вашем файле Httpd.conf, вы бы объявили его там с помощью:

RewriteMap  lc int:tolower

Тогда в вашем .htaccess файле используйте вашу переменную lc, но опять же только один из двух выиграет, а вы не можете иметь оба.

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

Действительно, единственный способ увидеть это происходит в php, вот так:

$this->load->helper('url');
$your_URL = uri_string();
preg_match_all('/[A-Z]/', $your_URL, $match) ;
$total_count = count($match [0]);
if($total_count > 0){
    $new_line = strtolower($your_URL);
    redirect($new_line);
}

Это я бы положил в основную конструкцию ваших классов, надеюсь, это поможет вам.

...