Apache: выполнение сопоставления с образцом и группировка с помощью RewriteRule приводит к локальному пути вместо получения компонента URL

Я без всякой радости искал, получали ли на этот ответ раньше.

Я бы хотел хотел бы использовать сопоставление с образцом 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] , который, как я думал, предотвратит расширение, но этого не произошло.

Есть идеи, как я могу предотвратить это? Любая помощь будет принята с благодарностью.

1
задан 22 August 2017 в 11:27
1 ответ

Отвечая на @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 в блоке, они ничего не делают и не имеют никакого эффекта.

Спасибо

0
ответ дан 4 December 2019 в 04:40

Теги

Похожие вопросы