我在我的RewriteMap文件中使用web.config文件将旧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/
)时,它不起作用。我需要它工作,无论是否存在一个拖尾斜杠上的旧网址。
我不想重复所有的映射键。
非常感谢。
发布于 2018-01-05 11:14:00
如果在regexp ^(.*[^/])(\/?)$
中不尾随斜杠匹配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>
https://stackoverflow.com/questions/42256115
复制相似问题