【问题标题】:"+" character causing issues in IIS URL rewrite“+”字符导致 IIS URL 重写问题
【发布时间】: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 而不是完全匹配?

标签: c# asp.net-mvc iis


【解决方案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

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多