Я без всякой радости искал, получали ли на этот ответ раньше.
Я бы хотел хотел бы использовать сопоставление с образцом 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 "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>
Этот блок находится в блоке
, который, в свою очередь, находится в основном блоке Блок
.
Если я вынесу его из блока
, шаблон ^ (. *) $
даст нам то же самое % {REQUEST_URI}
вернется. Внутри блока
он расширяется до локальной файловой системы + запрошенного ресурса (если я запрашиваю /index.html
, он расширяется до / var / www / html / index.html
.
Не обращайте внимания на те Define в блоке, они ничего не делают и не имеют никакого эффекта.
Спасибо