1

我对重写地图还很陌生,但我们确实让我们的地图在非常基础的层面上工作。网站重新设计后,我们设置了一个广泛的重写地图(数千条规则),将旧页面指向新页面。我们遇到的麻烦是我们必须为同一页面添加多个值才能使重写工作。

例子:

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] $ 如果所有 url 都包含“about”但它们不包含,那将会很棒。

另请注意,我们不是按目录重定向,而是按文件名重定向。这是我们的 CMS 设置为不使用 .aspx 扩展名,因此任何扩展名都可以使用。

我想要的是只需要为每个 URL 设置一个规则,如下所示:“ 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>

任何见解将不胜感激。

4

2 回答 2

0

[Hh][Tt][Tt][Pp]://(([^/]) /) [Aa][Bb][Oo][Uu][Tt].*

请参阅https://regex101.com/r/rZhJyz/1,只需将“about-us”附加到第 1 组比赛。

于 2016-12-02T02:05:03.813 回答
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>

标准重写映射规则的重要变化是:

  1. 添加(\.aspx)?为匹配 url 的可选部分,并已添加?.*以使初始.*不贪婪,因此它不包含扩展名。
  2. 更改{Test:{REQUEST_URI}}{Test:{R:1}}使用匹配 url 中的匹配输入(.*)
  3. 从重写映射键中取出前导/
于 2018-08-22T08:38:19.903 回答