首页 > 解决方案 > 使用 IIS 重写替换 URL 中的 %5E

问题描述

我有以下问题:

我通过 HttpResponse.Redirect 方法向 Web 应用程序发送请求:http(s)://localhost/application?arg1=abc^def。这在 IE/Edge/Chrome/Firefox 上运行良好。

但是在 Safari 上,我遇到了请求按以下编码字符串发送的问题:

http(s)://localhost/application.aspx?arg1=abc%5Edef

应用程序不喜欢/接受这一点,我无法对应用程序执行更改。

是否可以以某种方式重写由 IIS 重写模块托管应用程序的网络服务器上的 URL?

我已经尝试使用以下正则表达式模式创建规则:

^应用程序?(.*)%5E(.*)

以及以下操作:

重写 URL: application.aspx?{R:1}%5E{R:2}

...但这似乎不起作用(尽管正则表达式模式已通过“测试模式”测试)

提前谢谢了!

标签: iosiissafariurl-rewritingcharacter-encoding

解决方案


这是因为你的重写规则有问题。以下配置会将http://localhost/application.aspx?arg1=abc%5Edef 重写http://localhost/application?arg1=abc^def

    <rewrite>
        <rules>
            <rule name="TEST" stopProcessing="true">
                <match url="(application.aspx)" />
                <action type="Rewrite" url="http://localhost/application?{C:1}^{C:3}" appendQueryString="false" />
                <conditions>
                    <add input="{QUERY_STRING}" pattern="(.*)(%5E)(.*)" />
                </conditions>
            </rule>
        </rules>
    </rewrite>

推荐阅读