我正在使用iis7的URL Rewrite模块完成以下几项工作:
我能够将前两个合并为一个规则,第三个项目是它自己的规则。问题是在请求URL的情况下会生成两个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>
答案 0 :(得分:6)
我似乎找到了自己问题的答案。这是一个黑客攻击,但完成所有必需的URL转换(例如尾随删除斜线,非www到www,toLowerCase,删除目录的默认文档,以及任何其他必要的重定向,如页面名称更改)。
我所谈论的问题实际上被称为“301重定向链接”,解决方案的呈现相当优雅,在这里:
http://www.seomoz.org/blog/what-every-seo-should-know-about-iis#chaining
答案 1 :(得分:0)
此解决方案来自先前的评论:
1)代替重定向,应用带有附加符号_
的重写2)添加新规则,该规则将以_开头并应用重定向
<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>