Странное поведение mod_rewrite

sinet

Почему не работает:
RewriteCond %{REQUEST_URI} ^/test
RewriteRule ^/test/(.*) /test.php?redir=$1\%3F%{QUERY_STRING} [L]
зато работает:
RewriteCond %{REQUEST_URI} ^/test
RewriteRule ^test/(.*) /test.php?redir=$1\%3F%{QUERY_STRING} [L]
?
Я плохо курил man или это реально баг?
Apache 2.2.3, ось Solaris 10

slonishka

Директива RewriteBase устанавливает конкретный, базовый URL для преобразований в контексте каталога. Как вы увидите ниже, RewriteRule может быть использовано в конфигурационных файлах каталогов (.htaccess). Это будет работать локально, т.е., префикс локального каталога отбрасывается на этом этапе обработки и ваши правила преобразований работают только в оставшейся части. В конце он автоматически добавляется обратно к пути. Настройка по-умолчанию; RewriteBase physical-directory-path.
http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html#...
сравни:
В конфигурационных файлах контекста сервера (httpd.conf) для запроса вида «GET /somepath/pathinfo»:
^/somepath(.*) /otherpath$1  ->  /otherpath/pathinfo

но:
Внутри конфигурационного файла каталога, для /somepath (т.е., файл .htaccess в каталоге /physical/path/to/somepath содержит RewriteBase /somepath) для запроса «GET /somepath/localpath/pathinfo»:
^localpath(.*) otherpath$1  ->  /somepath/otherpath/pathinfo

slonishka

ну это, разумеется, если ты в .htaccess правила писал.
вообще, такие ошибки хорошо исправляются чтением логов.

sinet

Мдя, спасибо.
Оставить комментарий
Имя или ник:
Комментарий: