如何设置规则,将 &
替换为网址中的 &
?
这有效:www.../home.asp?h=1&w=2
此操作失败:www.../home.asp?h=1&w=2
答案 0 :(得分:1)
对于初学者,应该注意您可以按如下方式访问混乱的w
参数:
Request.QueryString("amp;w");
但是,我希望你能想要更有说服力的东西:)
假设您有权访问IIS URL Rewrite模块(IIS 7及更高版本),您可以按如下方式向web.config添加一些规则:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="One Bad Ampersand" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{QUERY_STRING}" pattern="^([^&]+)&amp;([^&]+)$" />
</conditions>
<action type="Rewrite" url="{R:1}?{C:1}&{C:2}" appendQueryString="false" />
</rule>
<rule name="Two Bad Ampersand" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{QUERY_STRING}" pattern="^([^&]+)&amp;([^&]+)&amp;([^&]+)$" />
</conditions>
<action type="Rewrite" url="{R:1}?{C:1}&{C:2}&{C:3}" appendQueryString="false" />
</rule>
<rule name="Three Bad Ampersand" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{QUERY_STRING}" pattern="^([^&]+)&amp;([^&]+)&amp;([^&]+)&amp;([^&]+)$" />
</conditions>
<action type="Rewrite" url="{R:1}?{C:1}&{C:2}&{C:3}&{C:4}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
这些规则的作用是检查查询字符串中的传入&
并将其替换为&
。我认为不可能提出一个通用规则来处理任意数量的事件。但是,我已经建立了一个最多可出现3次的模式,您应该可以根据需要添加这些模式。
应该注意的是,如果您希望重定向用户的浏览器,可以将每个操作中的type
属性从Rewrite
更改为Redirect
。