1

301リダイレクト応答で送信したくないクエリ文字列キー( "mobile"、 "nomobile"など)がいくつかあります。

たとえば、に/about-usリダイレクトするURLがあるとし/aboutます。

RewriteRule ^about-us$ /about [NC,L,R=301]

書き換えルールはデフォルトでリダイレクトURLにクエリを保持します。したがって、次のような着信URLの場合:

/about?mobile=true&xyz=1

リダイレクトルールが適用されている場合、リダイレクトURLからモバイルクエリ文字列が削除されているが、xyzクエリ文字列が含まれている場所Urlでサーバーが応答するようにします。したがって、このリクエストをこの宛先URLで返すようにします。

/about?xyz=1

mobile, nomobile着信リクエストから(など)クエリ文字列を削除したくありません。URLの結果が200の場合、基になるASP.NETWebアプリケーションにmobileクエリ文字列を表示させます。このクエリ文字列の削除は、リダイレクト応答のLocationヘッダー(つまり、宛先URL)で発生する必要があります。

私は何千ものISAPIRewriteRulesを持っているので、RewriteCondすべてのルールにを適用したくありません。

ISAPIルールまたはカスタムモジュールをどこかに配置して、このロジックをISAPIで生成されたリダイレクトまたはIISから送信されるリダイレクト応答にグローバルに適用できますか?ご協力いただきありがとうございます。

4

1 に答える 1

2

IISでURL書き換えを使用すると、アウトバウンド応答ヘッダーを変更するルールを作成できます。以下は、URL書き換えツールから生成されたルールです。

<system.webServer>
 <rewrite>
  <outboundRules>
    <clear />
    <rule name="Remove nomobile from location">
      <match serverVariable="RESPONSE_Location" pattern="^(.*)\?nomobile(.*)" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="true" />
      <action type="Rewrite" value="{R:1}?{R:2}" />
    </rule>  
    <rule name="Remove mobile=true from location">
      <match serverVariable="RESPONSE_Location" pattern="^(.*)\?mobile(.*)" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="true" />
      <action type="Rewrite" value="{R:1}?{R:2}" />
    </rule>  
    <rule name="Replace &amp;">
      <match serverVariable="RESPONSE_Location" pattern="^(.*)(\?&amp;)(.*)" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="true" />
      <action type="Rewrite" value="{R:1}?{R:3}" />
    </rule>
    <rule name="Remove empty ?" enabled="true">
      <match serverVariable="RESPONSE_Location" pattern="(.*)\?$" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="true" />
      <action type="Rewrite" value="{R:1}" />
    </rule>
  </outboundRules>
 </rewrite>
</system.webServer>
于 2012-09-07T01:21:03.027 に答える