“+”字符导致 IIS URL 重写问题

Posted

技术标签:

【中文标题】“+”字符导致 IIS URL 重写问题【英文标题】:"+" character causing issues in IIS URL rewrite 【发布时间】:2021-11-14 20:59:48 【问题描述】:

我有想要在 IIS 中设置重定向的 URL。

Current URL: portal/en_us/apps/app+doc

New URL: apps/newapps

不适合

<rule name="From portal/en_us/apps/app+doc" stopProcessing="true">
    <match url="^portal/en_us/apps/app+doc$" ignoreCase="true" />
    <action type="Redirect" url="https://domain1123.com/apps/newapps" />
</rule>

导致 404 错误

【问题讨论】:

+ 在正则表达式中有含义。如果要匹配文字 +,则需要对其进行转义。 also: + 在 URL 中有点尴尬 - 它具有与空格的混合标识,以及 %20 试过这个+--> \+^portal/en_us/apps/app\+doc$ 但仍然无法正常工作。 是否可以将portal/en_us/apps/app 等重定向设置为https://domain1123.com/apps/newapps 而不是完全匹配? 【参考方案1】:

参考reference guide,我们会看到+ 被定义为这样工作:

匹配前一个元素一次或多次。

也就是说这个表达式:

^portal/en_us/apps/app+doc$

将匹配包含以下内容的整个字符串:

portal/en_us/apps/appdoc 门户网站/en_us/apps/apppdoc portal/en_us/apps/appppdoc 门户网站/en_us/apps/apppppdoc

等等。

要真正匹配文字+,您需要使用\ 对其进行转义:

^portal/en_us/apps/app\+doc$

现在它被视为文字 +,而不是解释为“一个或多个 p 字符”。

我添加了allowDoubleEscaping

<system.webServer>
     <security>
          <requestFiltering allowDoubleEscaping="true" />
     </security>
</system.webServer>

【讨论】:

我尝试了同样的方法,但仍然无法正常工作。 &lt;rule name="From portal/en_us/apps/app+doc" stopProcessing="true"&gt; &lt;match url="^portal/en_us/apps/app\+doc$" ignoreCase="true" /&gt; &lt;action type="Redirect" url="https://domain1123.com/apps/newapps" /&gt; &lt;/rule&gt;【参考方案2】:

您可以尝试先编码“+”字符,然后重定向。

您可以使用此链接进行编码:https://www.urlencoder.org。

【讨论】:

以上是关于“+”字符导致 IIS URL 重写问题的主要内容,如果未能解决你的问题,请参考以下文章

IIS URL重写非英文字符的规则问题

使用多个查询字符串重写 IIS URL

CORS 使用带有 ARR 和 URL 重写的 IIS 作为反向代理

带有 URL 重写模块的 IIS 7.5 在回发时将 QueryString 参数加倍

IIS URL 重写模块:基于 QueryString 的重定向

IIS-URL重写参数