Я выделил нечетный случай с mod_rewrite на стандартной установке Apache. Рассмотрим Правило, которое перезаписывает все запросы на файл с именем test.html
в корне:Apache не переписывает URL-адреса, содержащие файл в пути запроса
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase/
RewriteRule ^(.*)$ test.html [L]
</IfModule>
test.html
единственный файл в файловой системе.
Вот что происходит, когда я делаю некоторые запросы:
Request | Result | Status
----------------------------------------------------------
example.com/test.html | example.com/test.html | 200
example.com/foo | example.com/test.html | 200
example.com/foo.html | example.com/test.html | 200
example.com/foo/bar | example.com/test.html | 200
example.com/foo/bar.html | example.com/test.html | 200
example.com/test/bar | [error Not Found] | 404
example.com/test/bar.html | [error Not Found] | 404
Error messages for the last two requests:
The requested URL /test.html/bar was not found on this server
The requested URL /test.html/bar.html was not found on this server.
Я пробовал все виды RewriteRules, но я не могу предотвратить ошибки, без физического добавления нового каталога с именем test
.
Почему это происходит?
Есть ли способ отменить это поведение?
Хрустальный шар дикий догадку: это пахнет [типами карт/содержанием переговоров] (http://httpd.apache.org/docs/2.2/en/content-negotiation.html), что может привести к ИМО полностью удивительное поведение. –