Я искал, если на это уже ответили, без радости.
Я бы хотел использовать RewriteRule
сопоставление с образцом для получения запрошенного пути и перенаправления клиента в другое место, сохраняя путь в результирующем перенаправлении.
Я думал, что что-то вроде этого поможет:
RewriteRule. ^(.*)$ http://testserver/test/$1
Если пользователь запрашивает foo
, отправь его test/foo
(не беспокойтесь о зацикливании, я положил несколько RewriteCond
логика, чтобы предотвратить это).
К моему удивлению, в Apache получается что-то вроде http://testserver/foo/var/www/html
. Он сделал следующее:
/bar /var/www/html/bar
Я поднял уровень журнала mod_rewrite и обнаружил, что он соответствует, но Apache расширялся, соответствуя локальному пути /
, который /var/www/html
и использовать это для перенаправления браузера, что не сработает.
Я пробовал использовать [PT]
который, как я думал, предотвратит расширение, но этого не произошло.
Есть идеи, как я могу предотвратить это? Любая помощь будет оценена.
Отвечая на @MrWhite, прилагаю соответствующие <if>
блок:
<If "env('var1') =='1' && env('var2') =='0' && env('var3') =='1'" > Define requestUri $1 Define backend $customDomain RewriteEngine on RewriteCond %{REQUEST_URI} !^/redir/.*$ RewriteRule ^(.*)$ /redir/%{REQUEST_URI} </If>
Этот блок находится под <Location>
блок, который в свою очередь находится под основным <VirtualHost>
блок.
Если я вынесу его из <If>
блок, узор ^(.*)$
дает нам то же самое %{REQUEST_URI}
вернется. Внутри <If>
блок, он расширяется до локальной файловой системы + запрошенного ресурса (если я запрашиваю /index.html
он расширяется до /var/www/html/index.html
.
Неважно о тех Определить в блоке они ничего не делают и не действуют.
Спасибо