4

我正在使用 iis7 的 URL 重写模块来完成几件事:

  • 301 重定向规则从非 www 到 www
  • 301 将规则 .info 重定向到 .com(移动到我的域的 .com 版本)
  • 301 将规则从旧页面(例如 /page-name.asp)重定向到 /page-name

我已经能够将前两个组合成一个规则,第三项是它自己的规则。问题是在请求如下网址的情况下会生成两个 301 重定向:

site.info/page-name.asp/

首先执行 301 以:

www.site.com/page-name.asp(例如,添加了 www 并将 .info 转到 .com)

然后从那里完成第二个 301:

www.site.com/page-name

我的问题是:我怎样才能将这些组合起来,以便只发生一个 301 重定向而不是两个?以下是它们当前位于我的 web.config 中的两条规则:

<rule name="SEO - 301 Redirect - .info to .com AND force WWW" stopProcessing="false">
    <match url="(.*)" ignoreCase="true" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="^site\.info$" />
    </conditions>
    <action type="Redirect" url="{ToLower:http://www.site.com/{R:1}}" redirectType="Permanent" />
</rule>
<rule name=".aspVersion-to-friendlyvia301" stopProcessing="false">
        <match url="(.*).asp" />
        <action type="Redirect" url="{R:1}" />
</rule>
4

2 回答 2

7

我似乎找到了自己问题的答案。这有点小技巧,但完成了所有必需的 url 转换(例如,删除尾部斜线、非 www 到 www、toLowerCase、删除目录的默认文档以及任何其他必要的重定向,例如页面名称更改)。

我正在谈论的问题实际上称为“301 重定向链接”,并且解决方案相当优雅地呈现在这里:

http://www.seomoz.org/blog/what-every-seo-should-know-about-iis#chaining

于 2012-10-17T20:17:41.017 回答
0

此解决方案来自先前的评论:

1)而不是重定向应用重写附加符号_

2)添加将赶上以 _ 开头的 URL 并应用重定向的新规则

<rule name="LowerCaseRule1" stopProcessing="false">
      <match url="(.*)" ignoreCase="false" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_METHOD}" pattern="GET" />
        <add input="{R:1}" pattern="[A-Z]" ignoreCase="false" />
      </conditions>
      <action type="Rewrite" url="_{ToLower:{R:1}}" />
</rule>
<rule name="RemoveTrailingSlashRule1" stopProcessing="false">
      <match url="(.*)/$" />
      <conditions  logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_METHOD}" pattern="GET" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
      </conditions>
      <action type="Rewrite" url="_{R:1}" />
    </rule>
<rule name="Final redirect" stopProcessing="true">
      <match url="^(_+)(.*)" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_METHOD}" pattern="GET" />
      </conditions>
      <action type="Redirect" url="{R:2}" />
</rule>
于 2019-02-06T10:39:16.023 回答