IIS 7.5サイト: http://site1.com/ でURL書き換えを設定しています
これは、2番目のサイトへのリバースプロキシとして機能します: http://site2.com/
イベントの流れは次のとおりです。
1。ブラウザはでGETを実行します http://site1.com/somepath
2。 site1はURL書き換えリバースプロキシであるため、これはsite2に渡されます。これはうまく機能し、これを必要とするmodを実行したため、ホストは正しく設定されています。
3。 site2は301ステータスで応答し、HTTPロケーションヘッダーを http://site3.com/somenewpath に設定します。
4。 site1はブラウザに301で応答しますが、LocationヘッダーのHostをsite1に置き換えます: http://site1.com/somenewpath
手順4で実行したいのは、site1がHTTP Locationヘッダーで http://site3.com/somenewpath で応答し、このデータを直接パススルーすることです。これを解決するために適用できるアウトバウンドルールが必要だと思いますが、まだそれを理解することができていません。
アプリケーションリクエストルーティング が関与する可能性がありますか? IIS->マシンまたはサイト->アプリケーション要求ルーティングキャッシュ->サーバープロキシ設定]を確認し、[応答ヘッダーの逆書き換えホスト]チェックボックスをオフにします。これをマシンレベルで行う場合は、すべてのサイトで有効になります。特定のサイトで実行した場合、そのサイトでのみ有効になり、ボックス上の他のサイトは影響を受けません。
上記のコメントで述べたように、リバースプロキシのデフォルトの動作は、応答をそのまま通過させることだと思います(アウトバウンドリライトルールが設定されていないことを前提としています)。ただし、プロキシの背後にあるサーバーからの301応答を使用して、シナリオを具体的にテストしていません。
特別なアウトバウンドルールが実際に必要な場合、このコードはすべての301応答のHTTPロケーションヘッダーを 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>
このルールは、 RL Rewrite Module 2.0 Configuration Reference に投稿されたルールを少し変更したものです。