Windows 8.1 上の IIS 8.5 でIIS URL Rewrite 2.0を使用しようとしています。Accessing URL Parts from a Rewrite Ruleによると、
For an HTTP URL in this form: http(s)://<host>:<port>/<path>?<querystring>
• The <path> is matched against the pattern of the rule.
• The <querystring> is available in the server variable called QUERY_STRING and can be accessed by using a condition within a rule.
• The <host> is available in the server variable HTTP_HOST and can be accessed by using a condition within a rule.
• The <port> is available in the server variable SERVER_PORT and can be accessed by using a condition within a rule.
• Server variables SERVER_PORT_SECURE and HTTPS can be used to determine if a secure connection was used. These server variables can be accessed by using a condition within a rule.
• The server variable REQUEST_URI can be used to access the entire requested URL path, including the query string.
それをテストするために、私が使用したルールは次のとおりです。
<rule name="Test" stopProcessing="true">
<action type="Redirect" url="http://localhost/?{HTTP_HOST}" redirectType="Temporary" />
</rule>
次に、Fiddler の Composer タブを使用して、次の要求を作成しました。
http://localhost.localdomain:65352/
IIS が応答した
HTTP/1.1 307 Moved Temporarily
Location: http://localhost/?localhost.localdomain:65352
このことから、上記のドキュメントとは対照的に、HTTP_HOST 変数にポート番号が含まれていることがわかります。これにより、オプションのポート番号の存在を説明する必要があるため、マッチング ルールがいくらか複雑になります。ポート番号なしでホスト名を取得するにはどうすればよいですか?