終於下定決心放棄之前啟用的二級域名,改回子目錄格式。經測試改回子目錄後,百度收錄加快一天收錄多次,現在准備把之前的二級域名(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重定向後,在子目錄中的其他頁面都會跳轉到首頁。
這樣設置以後,你的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)
不管大小寫強行指定字符匹配,這個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)
大寫。