IIS7 で動作するように構成されたアウトバウンド ルールを取得する際に問題が発生しています。私の最終的な目標は、outboundRules をいくつかのブラウザー内で機能させることです。この例では、さまざまな HTML タグから .aspx を削除するルールを使用しています。
シナリオ 1 (コンテンツの長さの不一致):
その特定のルールを IIS7 で機能させるには、動的圧縮を無効にし、既定でキャッシュをオフにする必要がありました。HTML の書き換えには成功しましたが、別の問題が発生して使用できなくなりました。
outboundrules を使用してコンテンツを書き換えようとすると、ヘッダーの「コンテンツの長さの不一致」が原因で、Chrome と Firefox が継続的にロードを実行するという問題が発生します (Fiddler の特定にご協力いただきありがとうございます)。書き換えは機能しますが、コンテンツの長さが正しくないため、これらの 2 つのブラウザーは永久に読み込まれているように見えます。特にChromeでは、javascriptがハングアップしているように見え、誰かが物理的に停止ボタンを押すまでjqueryが機能しないため、問題が発生します。
これは、そのシナリオを提供するために私が始めた web.config の関連セクションです。
<system.webServer>
<rewrite>
<urlCompression doStaticCompression="false" doDynamicCompression="false" dynamicCompressionBeforeCache="false" />
<modules runAllManagedModulesForAllRequests="true" />
<outboundRules>
<rule name="Remove .aspx from links in the response" preCondition="IsHTML" stopProcessing="false">
<match filterByTags="A, Area, Base, Form, Frame, IFrame, Link, Img, Script" pattern="(.*)\.aspx(\?.*)?$" />
<action type="Rewrite" value="{R:1}{R:2}" />
</rule>
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
<caching enabled="false" enableKernelCache="false" />
</system.webServer>
この問題を調査しているときに、 outboundRules タグのrewriteBeforeCache="true"属性に言及しているこのstackoverflowの質問と、コンテンツの長さの問題で遭遇したのと同じことを説明したこのブログ投稿を見つけました。
その属性を変更すると、アウトバウンド ルールが機能しなくなります。
シナリオ 2 (アウトバウンド ルールが機能しない):
そのため、以前の情報により、web.config の微調整を開始し、outboundRules タグの rewriteBeforeCache 属性を使用して、コンテンツの長さの不一致を解決することができました。その属性を機能させるために、キャッシュをオンに戻すことができました。これにより、シナリオ 1 からの応答の長さの不一致が修正されましたが、現在は outboundRules\rule 要素がどれも機能していないように見えます。最も単純なルールをいくつか試してみましたが、rewriteBeforeCache 属性を削除すると正常に機能しますが、シナリオ 1 が発生します。
<system.webServer>
<rewrite>
<urlCompression doStaticCompression="false" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />
<modules runAllManagedModulesForAllRequests="true" />
<outboundRules rewriteBeforeCache="true">
<rule name="Remove .aspx from links in the response" preCondition="IsHTML" stopProcessing="false">
<match filterByTags="A, Area, Base, Form, Frame, IFrame, Link, Img, Script" pattern="(.*)\.aspx(\?.*)?$" />
<action type="Rewrite" value="{R:1}{R:2}" />
</rule>
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
シナリオ 1 では、IIS7 のブラウザーで 1 つのエラーが発生します。シナリオ 2 では、outboundrules が機能しなくなります。
キャッシング、チャンクモード転送を無効にし、考えられるすべての組み合わせを試して、任意の数のオプションを変更しました。
AppPool に関する追加メモ: IIS7、.NET4.0、クラシック パイプライン
IIS7.5サーバーへの移行以外に、これに対処するために他にどのようなオプションがあるかについて、他の誰かが何か考えを持っていますか?