URL Rewrite сохраняет исходное местоположение хоста при обратном перенаправлении прокси 301
У меня есть настройка перезаписи URL на сайте IIS 7.5:http://site1.com/
Это действует как обратный прокси на второй сайт:http://site2.com/
вот поток событий:
1. Браузер делает GET on http://site1.com/somepath
2. Это передается в site2, потому что site1-это обратный прокси-сервер перезаписи URL. Это хорошо работает, и хост правильно настроен, потому что я сделал мод, который требует этот.
3. site2 отвечает со статусом 301 и устанавливает заголовок местоположения HTTP вhttp://site3.com/somenewpath
4. site1 отвечает браузеру 301 но заменяет хозяина в заголовке местоположения с site1:http://site1.com/somenewpath
Что я хочу сделать на шаге 4, так это то, что site1 отвечает http://site3.com/somenewpath в заголовке местоположения HTTP и делает прямой проход через эта информация. Я чувствую, что должно быть исходящее правило, которое может быть применено для решения этого, но пока не смог понять это.
2 ответов
мог бы Запрос Маршрутизации участвовать? Посмотрите на IIS - > Machine или Site - > Application Request Routing Cache - > Настройки прокси-сервера и снимите флажок "обратный перезаписать хост в заголовках ответов". Если вы сделаете это на машинном уровне, это вступит в силу для всех сайтов. Если вы сделаете это на определенном сайте, это вступит в силу только для этого сайта, а другие сайты на коробке не будут затронуты.
Как я сказал в приведенных выше комментариях, я считаю, что поведение по умолчанию обратного прокси-сервера должно пройти через ответ нетронутым (предполагается, что нет набора исходящих правил перезаписи). Однако я не тестировал ваш сценарий специально с ответом 301 от сервера за прокси-сервером.
Если на самом деле требуется специальное исходящее правило, этот код изменит заголовок HTTP-местоположения всех 301 ответов на http://site3.com/somepath
<outboundRules>
<!-- This rule changes the domain in the HTTP location header for redirect responses -->
<rule name="Change Location Header">
<match serverVariable="RESPONSE_LOCATION" pattern="^http://[^/]+/(.*)" />
<conditions>
<add input="{RESPONSE_STATUS}" pattern="^301" />
</conditions>
<action type="Rewrite" value="http://www.site3.com/{R:1}" />
</rule>
</outboundRules>
это правило является незначительной модификацией одного, размещенного в URL переписать модуль 2.0 ссылка конфигурации