Skip to main content
 首页 » 网络日志

ISAPI_Rewrite 各版本301转向大全(附ISAPI_Rewrite语法规则)

14年前 (2010-08-26)28490

接上篇《纠结于二级域名和子目录 新站做SEO还是推荐使用子目录》终于下定决心放弃之前启用的二级域名,改回子目录格式。经测试改回子目录后,百度收录加快一天收录多次,现在准备把之前的二级域名(google/soso都收录了好几万页)301重定向到子目录下。使用IIS下301转向方法,但问题出现了,发现收录的部分伪静态的页面无法正确重定向,全部重定向首页。IIS 做伪静态采用的是ISAPI_Rewrite 插件,大家知道ISAPI_Rewrite 不仅可以实现url 重写,还可以用来设置301转向(2.x以上才支持,1.3版本仅支持302转向),下面介绍ISAPI Rewrite做301重定向的方法:

1. 将不带www的顶级域名301重定向到带www的域名

# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond Host: ^chenchanglong\.com$
RewriteRule (.*) http\://www\.chenchanglong\.com$1 [I,RP]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond %{HTTP:Host} ^chenchanglong\.com$
RewriteRule (.*) http\://www\.chenchanglong\.com$1 [NC,R=301]

2. 不同域名之间的301转向

# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond %{HTTP:Host} ^chenchanglong\.cn$
RewriteRule (.*) http\://www\.chenchanglong\.com$1 [NC,R=301]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond %{HTTP:Host} ^www\.chenchanglong\.cn$
RewriteRule (.*) http\://www\.chenchanglong\.com$1 [NC,R=301]

3. 将页面301重定向到另外一个页面

# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule ^/oldpage.html$ http://chenchanglong.com/newpage.html[I,O,RP,L]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule ^/oldpage.html$ http://chenchanglong.com/newpage.html[NC,L,R=301,O]

注意:ISAPI_Rewrite 1.3是现在国内应用得比较多的一个老版本,它可用于url 重写,但并不适合用来实现真正的301重定向功能。建议下载最新的ISAPI_Rewrite 3.0 版本。ISAPI_Rewrite 1.3 的在IIS下对域名重定向虽然能够顺利跳转,但是返回的仍然是302 HTTP header,而不是301 状态码。而且该段代码用于301重定向后,在子目录中的其他页面都会跳转到首页。

这样设置以后,你的windows iis 也能实现301重定向了,不管是Google 和百度搜索引擎都不会有因为带有www和不带www 的域名而产生重复页面问题了。

 附:ISAPI_Rewrite语法规则

ISAPI_Rewrite 规则对大小写敏感,但可以忽略大小写了。
I (ignore case)不管大小写强行指定字符匹配。
例:RewriteRule /code/project/([0-9,a-z]*).html /soft.jsp\?softpy=$1 [I] 

其他的参数一览 
I (ignore case) 
不管大小写强行指定字符匹配,这个FLAG影响RewriteRule指令和相应的RewriteCond 指令。

F (Forbidden) 
对客户端做反应,停止REWRITING进程并且发送403错误,注意在这种情况下FORMATSTRING 是无用的并可以设置为任何非空字符串。 

L (last rule) 
不应用任何重写规则在此停止重写进程,使用这个FLAG以阻止当前被重写的URI被后面的规则再次重写。

N (Next iteration) 
强制REWRITINGENGINE调整规则目标并且从头重启规则检查(所有修改将保存),重启次数由RepeatLimit指定的值限制,如果这个数值超过N FLAG将被忽略。

NS (Next iteration of the same rule) 
以N标记工作不从相同的规则重启规则规则进程(例如强制重复规则应用),通过RepeatLimit指令指定一个反复实行某一规则的最大数目。

P (force proxy) 
强制目的URI在内部强制为代理需求并且立即通过ISAPI扩展应付代理需求,必须确认代理字符串是一个有效的URI包括协议 主机等等否则代理将返回错误。

R (explicit redirect) 
强制服务器对客户端发出重定向指示即时应答,提供目的URI的新地址,重定向规则经常是最后规则。

RP (permanent redirect) 
几乎和[R]标记相同但是发布301HTTP状态而不是302HTTP状态代码。

U (Unmangle Log) 
当URI是源需求而不是重写需求时记载URI。

O (nOrmalize) 
在实行之前标准化字符串。标准化包括URL-ENCODING,不合法的字符的再移动等,这个标记对于URLS和URLS-ENDODED头是有用的。

CL (Case Lower) 
小写。

CU (Case Upper) 
大写。

RewriteHeader directive 
Syntax: RewriteHeader HeaderName Pattern FormatString [Flags] 
这个指令是RewriteRule的更概括化变种,它不仅重写URL的客户端需求部分,而且重写HTTP头,这个指令不仅用于重写。生成,删除任何HTTP头,甚至改变客户端请求的方法。

HeaderName 
指定将被重写的客户头,可取的值与 RewriteCond 指令中TestVerb参数相同。

Pattern 
限定规则表达式以匹配Request-URI。

FormatString 
限定将生成新的URI的FormatString 。
[Flags] 
是一个下列FLAGS的命令分隔列表。

I (ignore case) 
不管大小写强行指定字符匹配,这个FLAG影响RewriteRule指令和相应的RewriteCond 指令。
F (Forbidden) 
对客户端做反应,停止REWRITING进程并且发送403错误,注意在这种情况下FORMATSTRING 是无用的并可以设置为任何非空字符串。

L (last rule) 
不应用任何重写规则在此停止重写进程,使用这个FLAG以阻止当前被重写的URI被后面的规则再次重写。

N (Next iteration) 
强制REWRITINGENGINE调整规则目标并且从头重启规则检查(所有修改将保存),重启次数由RepeatLimit指定的值限制,如果这个数值超过N FLAG将被忽略。

NS (Next iteration of the same rule) 
以N标记工作不从相同的规则重启规则规则进程(例如强制重复规则应用),通过RepeatLimit指令指定一个反复实行某一规则的最大数目。

R (explicit redirect) 
强制服务器对客户端发出重定向指示即时应答,提供目的URI的新地址,重定向规则经常是最后规则。

RP (permanent redirect) 
几乎和[R]标记相同但是发布301HTTP状态而不是302HTTP状态代码。

U (Unmangle Log) 
当URI是源需求而不是重写需求时记载URI。

O (nOrmalize) 
在实行之前标准化字符串。标准化包括URL-ENCODING,不合法的字符的再移动等,这个标记对于URLS和URLS-ENDODED头是有用的。

CL (Case Lower) 
小写。
CU (Case Upper) 
大写。


 

评论列表暂无评论
发表评论
新浪微博
微信