У меня есть одно правило перезаписи, которое отправляет все запросы на index.php
:
RewriteRule ^.*$ index.php [NC,L]
(Помимо RewriteEngine On
, это все, что есть в .htaccess
файл)
Это работает, если путь запроса не начинается с index/
, и в этом случае результат 404 Not Found
.
Если я изменю имя файла index.php
к index2.php
(и соответствующее ему правило перезаписи), он снова начинает работать, поэтому очевидно, существует конфликт, когда первый сегмент запрошенного пути равен первому сегменту файла назначения.
В mod_rewrite
журнал содержит это (при запросе /index/hello
, который терпит неудачу):
add path info postfix: /path/to/index.php -> /path/to/index.php/hello
strip per-dir prefix: /path/to/index.php/hello -> index.php/hello
applying pattern '^.*$' to uri 'index.php/hello'
rewrite 'index.php/hello' -> 'index.php'
add per-dir prefix: index.php -> /path/to/index.php
initial URL equal rewritten URL: /path/to/index.php [IGNORING REWRITE]
(Некоторая информация журнала удалена или изменена для удобства чтения.)
Мой сервер Apache/2.2.22
.
NB: этот сайт, .htaccess
файл и index.php
включенный файл, работал без проблем, пока я не переустановил Debian на новом сервере, поэтому я предполагаю, что сейчас это происходит из-за какого-то конфликта конфигурации или ошибки версии. Никаких файлов сайта я не менял.
Любые идеи?
Добавь это:
Options -Multiviews
они обычно не очень хорошо работают в сочетании с mod_rewrite
Кстати: если это все, что вы делаете в настоящее время, используя новый FallbackResource
может быть более эффективным. (Версия> = 2.2.16).