他のいくつかのWebサーバーのリバースプロキシとして機能するIIS7サーバーがあります。他のサーバーは異なるポートで実行されるため、IIS7サーバーは「わかりやすいURL」を提供し、すべてポート80で提供します。URL書き換えは、要求をバックエンドサーバーに渡すために使用されます。
そのようなサーバーの1つがTeamCity(継続的インテグレーションおよびビルドサーバー)です。このサーバーは、ビルドの結果(「ビルドアーティファクト」)をダウンロードする方法を提供します。通常、これらのアーティファクトはZipアーカイブです。 URLの例を次に示します。
ASCOM+Telescope+Driver+for+AWR+6.0.40.825.Zip
の+文字は、実際には最終ファイル名のスペースです。 TeamCityサーバーは+文字を入力します。
このリンクをクリックすると、次のエラーが表示されます IIS7サーバーから:
404 - ファイルまたはディレクトリが見つかりません。
探しているリソースが削除されているか、名前が変更されているか、一時的に利用できない可能性があります。
IIS7ログファイルに表示される実際のURLは次のとおりです。
/repository/download/bt25/4164:id/ASCOM+Telescope+Driver+for+AWR+6.0.40.825.Zip
書き換えルールはパターン(.*)
に一致し、を使用してURLを書き換えます。
http:// localhost:8022 / {R:1}
これが興味深いことです。ブラウザに戻って+文字を編集し、慎重にスペースに置き換えると、URLが機能します。
+文字に対してURL書き換えがどういうわけか機能していないと結論付けます。これは既知の問題ですか?助言がありますか?
H0tw1r3はすでに回答しているため、URL検証を無効にする必要があります。
IISサーバーレベルで実行する場合は、次のコマンドを使用します。
%windir%\system32\inetsrv\appcmd set config /section:requestfiltering /allowdoubleescaping:true
アプリケーションレベルでのみ無効にする場合は、web.configファイルに次のセクションを追加するだけです。
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>