Мой htaccess не работает:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\.php$ /blah/$1 [R=301,L] RewriteRule ^(.*)$ /blah/index.php/$1 [L]
В принципе /blah/about.php следует перенаправить на / blah / about
Я использую codeigniter, поэтому последняя строка требуется для обработки URL.
Переадресация работает нормально, но я получаю внутреннюю ошибку сервера в / blah / about
** Редактировать – журнал ошибок:
Запрос превысил предел 10 внутренних переадресаций из-за вероятной ошибки конфигурации. Используйте «LimitInternalRecursion», чтобы увеличить предел, если это необходимо. Используйте «LogLevel debug», чтобы получить обратную трассировку.
Я думаю, вам просто нужно изменить свою последнюю строку:
RewriteRule ^(.*)$ /blah/index.php?/$1 [L]
У меня нет особого опыта работы с CodeIgniter, но, как правило, фреймворки хотят проталкивать все запросы через центральный контроллер (index.php), а затем анализировать URL-адрес запроса изнутри.
EDIT: просто обновил свой ответ на примере здесь: http://codeigniter.com/wiki/mod_rewrite/ , это должно быть так, как это хочет CodeIgniter.
ОБНОВЛЕНИЕ. Вероятно, вы должны дублировать RewriteConds для второго RewriteRule, они применимы только к первому:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\.php$ /blah/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /blah/index.php/$1 [L]
Спасибо @ Cryo за помощь, это исправление:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\.php$ /blah/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /blah/index.php/$1 [L]
Как насчет:
RewriteRule ^(.*)(\.php)?$ /blah/index.php/$1 [L]
и удалите предыдущую строку.
Также убедитесь, что /blah/about.php
не существует.
Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*)\$ $1.php [NC]