Назад | Перейти на главную страницу

404 возвращается, хотя правило перезаписи соответствует

У меня есть одно правило перезаписи, которое отправляет все запросы на 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).