Странное изменение поведения в mod_rewrite - PullRequest
0 голосов
/ 07 января 2010

В контексте .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).

Знаете ли вы, что вызвало это изменение поведения? Вы заметили то же самое?

1 Ответ

0 голосов
/ 07 января 2010

Хорошо, я нашел, что случилось.

На самом деле, я был не в моем DocumentRoot, а в VirtualDocumentRoot благодаря mod_vhost_alias.

Проблема не возникает при использовании «настоящих» виртуальных хостов.

...