我是一个相当新的重写地图,但我们确实让我们的工作在一个非常基础的水平上。在网站重新设计之后,我们设置了一个广泛的重写映射(数千个规则)来将旧页面指向新页面。我们遇到的麻烦是我们必须为同一页面添加多个值才能使重写生效。
示例:
http://www.abc123.com/About --> http://www.abc123.com/about-us
http://www.abc123.com/About.aspx --> http://www.abc123.com/about-us
http://www.abc123.com/about/ --> http://www.abc123.com/about-us
http://www.abc123.com/about.aspx --> http://www.abc123.com/about-us
应该有一种方法可以在正则表达式中的基本URL之后输入任何通配符 - 我期待这样的事情:^。 / [about] $如果所有这些都很棒网址包含"关于"但他们没有。
另请注意,我们不是按目录重定向,而是按文件名重定向。我们的CMS设置为不使用.aspx扩展名,因此任何扩展都可以使用。
我想要的是每个网址只需要一条规则,如下所示: " http://www.abc123.com/about"并且它将所有上述变体指向新URL,无论它是否没有扩展名,或者扩展名是.html,.asp,.aspx或.whatever
这是否超出了重写规则的能力,还是我缺少一些基本的正则表达式?
以下是我们使用的规则:
<rule name="Redirect Rule for Legacy Redirects" enabled="true" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{Redirects:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>
非常感谢任何见解。
答案 0 :(得分:0)
[HH] [Tt的] [Tt的] [PP]://(([^ /]) /) [AA] [BB] [吴] [支原体] [Tt的]。 *
请参阅https://regex101.com/r/rZhJyz/1,只需将“about-us”附加到第1组比赛。
答案 1 :(得分:0)
今天必须弄清楚这一点。可以通过使用<match url>
正则表达式来剥离扩展名,然后使用此处匹配的部分作为重写映射查找的输入来完成。
重写映射键不能以/开头。
规则(和示例图)看起来像这样,例如剥离.aspx扩展名的示例(可以概括):
<rewrite>
<rewriteMaps>
<rewriteMap name="Test">
<add key="test" value="http://www.google.com" />
<add key="test.aspx" value="http://www.google.com" />
</rewriteMap>
</rewriteMaps>
<rules>
<rule name="Rewrite Map Optional Aspx Extension" stopProcessing="true">
<match url="^(.*?)(\.aspx)?$" />
<conditions>
<add input="{Test:{R:1}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
与标准重写映射规则相比,重要的变化是:
(\.aspx)?
添加为匹配网址的可选部分,并且已将?
添加到.*
中,以使首字母.*
不再贪婪,因此它不包括在内扩展名。 {Test:{REQUEST_URI}}
更改为{Test:{R:1}}
,以便它使用来自匹配URL (.*)
的匹配输入