管理资源吧

当前位置:管理资源吧首页>>>tech>>>c1>>>服务器教程

ISAPI-Rewrite 各版本301转向大全

  终于下定决心放弃之前启用的二级域名,改回子目录格式。经测试改回子目录后,百度收录加快一天收录多次,现在准备把之前的二级域名(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: ^downcc.com$

  RewriteRule (.*) http://www.downcc.com$1 [I,RP]

  # ISAPI_Rewrite 3.0 版本

  [ISAPI_Rewrite]

  # 3600 = 1 hour

  CacheClockRate 3600

  RepeatLimit 32

  RewriteCond %{HTTP:Host} ^downcc.com$

  RewriteRule (.*) http://www.downcc.com$1 [NC,R=301]

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

  # ISAPI_Rewrite 2.x 版本

  [ISAPI_Rewrite]

  # 3600 = 1 hour

  CacheClockRate 3600

  RepeatLimit 32

  RewriteCond %{HTTP:Host} ^downcc.cn$

  RewriteRule (.*) http://www.downcc.com$1 [NC,R=301]

  # ISAPI_Rewrite 3.0 版本

  [ISAPI_Rewrite]

  # 3600 = 1 hour

  CacheClockRate 3600

  RepeatLimit 32

  RewriteCond %{HTTP:Host} ^www.downcc.cn$

  RewriteRule (.*) http://www.downcc.com$1 [NC,R=301]

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

  # ISAPI_Rewrite 2.x 版本

  [ISAPI_Rewrite]

  # 3600 = 1 hour

  CacheClockRate 3600

  RepeatLimit 32

  RewriteRule ^/oldpage.html$ http://downcc.com/dll.html[I,O,RP,L]

  # ISAPI_Rewrite 3.0 版本

  [ISAPI_Rewrite]

  # 3600 = 1 hour

  CacheClockRate 3600

  RepeatLimit 32

  RewriteRule ^/oldpage.html$ http://downcc.com/dll.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重定向后,在子目录中的其他页面都会跳转到首页。

[Ok3w_NextPage]

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

  301重定向在线检测工具:http://www.itmop.com/tool/getheader.php

  附: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)

[Ok3w_NextPage]

  不管大小写强行指定字符匹配,这个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)

  大写。

tech首页 更多tech