重写规则&在网址中

时间:2016-03-30 13:22:50

标签: iis url-rewriting

如何设置规则,将 & 替换为网址中的 &

这有效:www.../home.asp?h=1&w=2

此操作失败:www.../home.asp?h=1&w=2

1 个答案:

答案 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;]+)&amp;amp;([^&amp;]+)$" />
                    </conditions>
                    <action type="Rewrite" url="{R:1}?{C:1}&amp;{C:2}" appendQueryString="false" />
                </rule>
                <rule name="Two Bad Ampersand" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{QUERY_STRING}" pattern="^([^&amp;]+)&amp;amp;([^&amp;]+)&amp;amp;([^&amp;]+)$" />
                    </conditions>
                    <action type="Rewrite" url="{R:1}?{C:1}&amp;{C:2}&amp;{C:3}" appendQueryString="false" />
                </rule>
                <rule name="Three Bad Ampersand" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{QUERY_STRING}" pattern="^([^&amp;]+)&amp;amp;([^&amp;]+)&amp;amp;([^&amp;]+)&amp;amp;([^&amp;]+)$" />
                    </conditions>
                    <action type="Rewrite" url="{R:1}?{C:1}&amp;{C:2}&amp;{C:3}&amp;{C:4}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

这些规则的作用是检查查询字符串中的传入&amp;并将其替换为&。我认为不可能提出一个通用规则来处理任意数量的事件。但是,我已经建立了一个最多可出现3次的模式,您应该可以根据需要添加这些模式。

应该注意的是,如果您希望重定向用户的浏览器,可以将每个操作中的type属性从Rewrite更改为Redirect