“+”字符导致 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>
【讨论】:
我尝试了同样的方法,但仍然无法正常工作。<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>
【参考方案2】:
您可以尝试先编码“+”字符,然后重定向。
您可以使用此链接进行编码:https://www.urlencoder.org。
【讨论】:
以上是关于“+”字符导致 IIS URL 重写问题的主要内容,如果未能解决你的问题,请参考以下文章
CORS 使用带有 ARR 和 URL 重写的 IIS 作为反向代理
带有 URL 重写模块的 IIS 7.5 在回发时将 QueryString 参数加倍