В контексте .htaccess
у меня есть простое правило переписывания:
RewriteEngine on
RewriteRule ^dir/([^/]+)/(.*) action/do.php?a=$1&b=$2 [L,QSA]
dir
и action
находятся в одном каталоге, который также является моим DocumentRoot
.
При доступе к http://example.org/dir/a/b запрос должен (и был) переписан на http://example.org/action/do.php?a=a&b=b без перенаправления или чего-либо видимого.
Однако, так как я обновил Apache 1.3 + mod_php до Apache 2.2 (mpm_worker) + PHP FastCGI (не знаю, как это связано, но, похоже, это так), правило прецедента возвращает ошибку 404:
Запрошенный URL /var/www/action/do.php не найден на этом сервере.
DocumentRoot
теперь вставлено в запрос! Файл /var/www/var/www/action/do.php
явно не существует.
В качестве обходного пути я изменил правило: (добавил /
в начале второй части)
RewriteEngine on
RewriteRule ^dir/([^/]+)/(.*) /action/do.php?a=$1&b=$2 [L,QSA]
И это работает (потому что, к счастью, в этом случае я нахожусь в каталоге DocumentRoot
).
Знаете ли вы, что вызвало это изменение поведения? Вы заметили то же самое?