Перенаправить * .php для очистки URL - PullRequest
3 голосов
/ 15 февраля 2010

Мой 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', чтобы получить обратную трассировку.

Ответы [ 4 ]

2 голосов
/ 15 февраля 2010

Я думаю, вам просто нужно изменить свою последнюю строку на:

RewriteRule ^(.*)$ /blah/index.php?/$1 [L]

У меня нет особого опыта работы с CodeIgniter, но обычно фреймворки хотят проталкивать все запросы через центральный контроллер (index.php), а затем анализировать URL-адрес запроса изнутри.

РЕДАКТИРОВАТЬ: Только что обновил мой ответ с примером отсюда: 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]
1 голос
/ 15 февраля 2010

Спасибо @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]
0 голосов
/ 15 февраля 2010

А как же:

RewriteRule ^(.*)(\.php)?$ /blah/index.php/$1 [L]

и удалите предыдущую строку.

Также убедитесь, что /blah/about.php не существует.

0 голосов
/ 15 февраля 2010
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)\$ $1.php [NC]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...