我有一些查询字符串键(“移动”,“nomobile”等),我不想在任何301重定向响应中发送。
例如,假设我有重定向到/about-us
的网址/about
。
RewriteRule ^about-us$ /about [NC,L,R=301]
默认情况下重写规则会在重定向Url中保留querystings。对于这样的传入Url:
/about?mobile=true&xyz=1
如果应用了重定向规则,我希望服务器使用从重定向Url中删除移动查询字符串但仍包含xyz查询字符串的位置Url进行响应。所以我希望此请求返回此目标网址:
/about?xyz=1
我不希望从传入请求中删除(mobile, nomobile
等)查询字符串。如果Url导致200,我希望底层的ASP.NET Web应用程序看到mobile
查询字符串。此查询字符串删除应发生在重定向响应的Location标头(即目标Url)上。
我有数以千计的ISAPI RewriteRules,因此我不想对每条规则应用RewriteCond
。
是否存在ISAPI规则或自定义模块我可以将此逻辑全局应用于ISAPI生成的重定向或来自IIS的任何重定向响应?谢谢你的帮助。
答案 0 :(得分:2)
在IIS中使用Url Rewrite,您可以创建规则来修改出站响应标头。以下是从Url Rewrite工具生成的规则:
<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 &">
<match serverVariable="RESPONSE_Location" pattern="^(.*)(\?&)(.*)" />
<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>