“%”字符在 IIS 中导致问题 URL 重写正则表达式

"%" character causing issues in IIS URL rewrite regex

我正在对一家在线商店进行平台改造,该过程的一部分是为旧链接编写 301 重定向,客户可能已加入书签以访问他们的新地址。除了旧地址包含 % 字符的那些之外,它们都可以工作。它似乎以某种方式干扰了正则表达式。规则是:

<rule name="Custom 41 redirect" stopProcessing="true">
  <match url="^c80/How-to-%20Use-Shop-Name\.aspx" ignoreCase="true" />
  <action type="Redirect" url="/how-to-use-shop-name" redirectType="Permanent" />
</rule>

使用 IIS 中内置的正则表达式测试器进行测试告诉我点击

/c80/How-to-%20Use-Shop-Name.aspx

匹配模式,但当我点击该地址时规则无法重定向我。

我还应该强调,我的 web.config 中大约有 400 个重写,但只有 3 个包含 % 字符中断。

由于针对正则表达式测试的字符串已经 Url 解码,因此您不再需要正则表达式中的 %20。只需使用普通的 space:

<match url="^c80/How-to- Use-Shop-Name\.aspx" ignoreCase="true" />

此外,如果 space 是可选的,您可以在其后使用 ?

<match url="^c80/How-to- ?Use-Shop-Name\.aspx" ignoreCase="true" />