Хочу в .htaccess настроить перенаправление запросов к файлам, перемещенным из текущего каталога в его подкаталог. Обычно это делается с указанием абсолютного пути в RewriteRule, но мне это очень не нравится, поскольку при изменении структуры каталогов приходится менять все пути. Хочу сделать так, чтобы это работало из любого каталога, где лежит .htaccess, и вдобавок работало как на сайте (через доменное имя), так и на его локальной копии под виндовым Apache (через localhost).
Apache 2.4.38. В VirtualHost указано C:\Site. Запрос "
http://localhost/base/testdir/test". В
C:/Site/base/testdir лежит .htaccess:
RewriteCond "%{REQUEST_URI}" ^(.*)/$1
RewriteCond "%{REQUEST_FILENAME}" !-f
RewriteRule ^(test)$ %1/en/$1 [R=302,L]
В
Regex Back-Reference Availability утверждается, что сперва анализируется Pattern в RewriteRule (это подтверждается порядком сообщений в логе), а затем обрабатываются RewriteCond, где можно использовать фрагменты Pattern из RewriteRule в виде $n. Но по логу видно, что $1 в RewriteCond не раскрывается:
strip per-dir prefix: C:/Site/base/testdir/test -> test
applying pattern '^(test)$' to uri 'test'
RewriteCond: input='/base/testdir/test' pattern='^(.*)/$1' => not-matched
То, что обработка доходит до RewriteCond, означает, что "test" подходит под выражение "^(test)$" (иначе RewriteCond не обрабатывается вообще).
Это у меня что-то не так, или Апач кривой?