1

我在 web.config 文件中使用 RewriteMap 来(301)将旧 URL 重定向到新 URL。目前规则如下:

    <rule name="Localhost Rewrite Rules" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^(.*\.)?example\.com$" />
        <add input="{lhRewrites:{REQUEST_URI}}" pattern="(.+)" />
      </conditions>
      <action type="Redirect" appendQueryString="false" url="{C:1}" redirectType="Permanent" />
    </rule>

请注意,该模式有意对域进行硬编码,因为这是特定于每个域名的更大规则集的一部分。所以我一般不打算优化或重写(请原谅双关语)规则。

rewriteMap.config 文件包含以下重定向:

<rewriteMap name="lhRewrites">
  <add key="/old" value="/new" />
</rewriteMap>

目前,当我访问该规则时,它可以正常工作http://example.com/old- 它重定向到http://example.com/new.

但是,当“旧”URL 包含尾部斜杠时,它不起作用,即http://example.com/old/. 无论旧 URL 上是否存在斜杠,我都需要它工作。

我宁愿不必复制所有映射键。

非常感谢。

4

1 回答 1

2

如果您在正则表达式中匹配 URL 而没有尾随斜杠^(.*[^/])(\/?)$,然后将此匹配的 URL 传递到重写映射中,则可以实现它。你的规则应该是这样的:

<rule name="Localhost Rewrite Rules" stopProcessing="true">
  <match url="^(.*[^/])(\/?)$" />
  <conditions>
    <add input="{HTTP_HOST}" pattern="^(.*\.)?example\.com$" />
    <add input="{lhRewrites:/{R:1}}" pattern="(.+)" />
  </conditions>
  <action type="Redirect" appendQueryString="false" url="{C:1}" redirectType="Permanent" />
</rule>
于 2018-01-05T19:14:00.033 回答