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 ссылка конфигурации