【问题标题】:Rewriting rule for & in urlurl中&的重写规则
【发布时间】:2016-04-09 08:02:20
【问题描述】:

如何设置规则以将 url 中的 & 替换为 &

这可行:www.../home.asp?h=1&w=2

这失败了:www.../home.asp?h=1&w=2

【问题讨论】:

  • 你能提供更多关于你期望的细节吗?您期望执行重写的级别是多少?第一个将有 2 个 url 编码的参数(h 和 w),而第二个有一个参数(值为 '1&w=2' 的 h)。两者本身都是合理的。所以,也许显示更多的上下文可能有助于回答这个问题。
  • @rpy 我需要第二个像第一个一样工作。
  • 这是某些外部(浏览器)发送的内容还是您识别为重写引擎的输入内容?你尝试了什么?我猜很明显:& && &?还有半明显的& &?还是一些看起来很奇怪的变体,比如& by &? (你认为重写的输出是什么?
  • 谷歌开发控制台和某些外部浏览器中的一些错误。

标签: iis url-rewriting


【解决方案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;amp;,并将其替换为&amp;。我认为不可能提出一个通用规则来处理任意数量的事件。但是,我已经建立了一个最多 3 次出现的模式,您应该能够按照需要添加尽可能多的事件。

需要注意的是,如果您希望重定向用户的浏览器,您可以通过将每个操作中的type 属性从Rewrite 更改为Redirect 来实现。

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 2014-10-27
    相关资源
    最近更新 更多