301跳轉(zhuǎn)與URL轉(zhuǎn)發(fā)
在購(gòu)買(mǎi)域名時(shí),域名本身是不帶有www的,但由于域名要通過(guò)DNS服務(wù)器解析后才可以使用,在這個(gè)過(guò)程中每一個(gè)域名是會(huì)指向一個(gè)web服務(wù)器ip地址,由于在很早之前網(wǎng)站方都會(huì)增加一個(gè)"www"的子域名來(lái)幫助客戶以更多的路徑訪問(wèn)網(wǎng)站,客戶通常都會(huì)按照:"www.++.com"的形式來(lái)訪問(wèn)站點(diǎn);如果你沒(méi)有做這個(gè)www的解析那么"www.++.com"就不能訪問(wèn),對(duì)于不懂技術(shù)或者不明白解析的客戶來(lái)講,這個(gè)問(wèn)題可能會(huì)造成他不能訪問(wèn)你的站,因?yàn)樗皇侵烙脦в?www"的形式訪問(wèn)你的站點(diǎn),可能不知道"++.com"也是同樣可以訪問(wèn)的!所以,后來(lái)也就有了更多人在延續(xù)這個(gè)做法;我們?cè)谫?gòu)買(mǎi)空間域名時(shí),服務(wù)商也會(huì)隨手就幫你做了這個(gè)"www"的解析,當(dāng)然,這個(gè)解析的服務(wù)器地址是和沒(méi)有"www"相同的,造成:你用帶"www"的和不帶兩個(gè)域名同時(shí)可以訪問(wèn)一個(gè)同樣的內(nèi)容。說(shuō)白了這個(gè)問(wèn)題的答案就是:能夠讓初次使用互聯(lián)網(wǎng)的人更快的訪問(wèn)進(jìn)你的網(wǎng)站。
但是這樣的話,會(huì)分散某個(gè)域名的流量與PR值,最好是將所有訪問(wèn)定向到某個(gè)域名下。
可以通過(guò)使用服務(wù)器技術(shù)實(shí)現(xiàn)的url轉(zhuǎn)發(fā)功能(url-forwarding 或 url redirect),轉(zhuǎn)發(fā)到帶www的域名來(lái)訪問(wèn)。但是我們說(shuō)到用這種url轉(zhuǎn)發(fā)方式是對(duì)seo不利的,對(duì)搜索引擎最友好的跳轉(zhuǎn)方式是使用301轉(zhuǎn)向(也叫301跳轉(zhuǎn),301重定向)。
所以這里就有一些疑問(wèn)了,為什么godaddy等域名注冊(cè)商提供的url轉(zhuǎn)發(fā)功能是不利于seo的?url轉(zhuǎn)發(fā)的原理是什么?如果要用301轉(zhuǎn)向,那么Linux apache, Windows IIS, php, ASP, ASP.NET, JSP 分別該如何設(shè)置來(lái)實(shí)現(xiàn)301重定向?
301重定向的作用
為什么要使用301轉(zhuǎn)向?首先第一條就是剛才我們提到的為了
seo優(yōu)化,在如何url網(wǎng)址規(guī)范化中也提到,設(shè)置301轉(zhuǎn)向后,原來(lái)的頁(yè)面將返回301 HTTP 狀態(tài)碼給瀏覽器或者搜索引擎,告知搜索引擎次頁(yè)面已經(jīng)永久重定向到了新的網(wǎng)頁(yè)上,spider就不會(huì)索引原網(wǎng)頁(yè),同時(shí)也會(huì)將原網(wǎng)頁(yè)的PR權(quán)重傳遞給跳轉(zhuǎn)到的新網(wǎng)頁(yè)。如果返回的是302狀態(tài)碼,則告訴spider頁(yè)面跳轉(zhuǎn)只是臨時(shí)的,spider仍然會(huì)索引原網(wǎng)頁(yè),這就造成了重復(fù)頁(yè)面問(wèn)題(即Google 補(bǔ)充材料)。如927caipiao.cn 302跳轉(zhuǎn)到y(tǒng)anet.cn,它們就會(huì)被當(dāng)做兩個(gè)重復(fù)頁(yè)面。
其次,由于各種原因要更換域名時(shí),可以使用301重定向?qū)⒗嫌蛎?01轉(zhuǎn)向到新的域名,這樣老域名的流量不會(huì)流失,PR權(quán)重也會(huì)轉(zhuǎn)移。另外當(dāng)有注冊(cè)了多個(gè)不同域名,指向到同一網(wǎng)站時(shí),也可以只設(shè)置一個(gè)主域名,將其他域名設(shè)置301轉(zhuǎn)向到主域名,這樣各個(gè)域名就不會(huì)分散權(quán)重。因此使用301轉(zhuǎn)向很有必要。
URL轉(zhuǎn)發(fā)的原理
url轉(zhuǎn)發(fā)有兩種方式,隱藏轉(zhuǎn)發(fā)和(url轉(zhuǎn)發(fā)后瀏覽器地址欄輸入的網(wǎng)址不變)不隱藏轉(zhuǎn)發(fā)(也叫顯性轉(zhuǎn)發(fā):url轉(zhuǎn)發(fā)后地址欄顯示的地址為轉(zhuǎn)發(fā)后的網(wǎng)址)。有人測(cè)試過(guò),不管是隱藏轉(zhuǎn)發(fā)還是不隱藏轉(zhuǎn)發(fā),根據(jù)不同的域名注冊(cè)服務(wù)商,可能會(huì)返回不同的http header。有的域名服務(wù)商管理后臺(tái)設(shè)置的url轉(zhuǎn)發(fā)功能(URL Forwarding)會(huì)使服務(wù)器返回302狀態(tài)碼給搜索引擎,而不是301 http 狀態(tài)碼。
據(jù)說(shuō)這類url轉(zhuǎn)發(fā)有的是通過(guò)給瀏覽器窗口套用一個(gè)框架iframe的方式來(lái)實(shí)現(xiàn)隱藏轉(zhuǎn)發(fā),有的則是使用Javascript或Meta Refresh來(lái)實(shí)現(xiàn)不隱藏方式的url轉(zhuǎn)發(fā),很少是真正用了301 重定向方法的。所以大家還是盡量少用url轉(zhuǎn)發(fā)功能,而是自己去手工設(shè)置實(shí)現(xiàn)301轉(zhuǎn)向。
如何實(shí)現(xiàn)301重定向
前面我們已經(jīng)提到了很多關(guān)于WordPress等404頁(yè)面的設(shè)置方法。設(shè)置301重定向(301轉(zhuǎn)向,跳轉(zhuǎn))的實(shí)現(xiàn)方法也有很多,下面根據(jù)不同的空間服務(wù)器類型和程序語(yǔ)言列出各種301重定向?qū)崿F(xiàn)代碼,要參考的童靴請(qǐng)對(duì)號(hào)入座:
Linux 主機(jī) Apache服務(wù)器 Mod-Rewrite 模式:通過(guò).htaccess文件
當(dāng)瀏覽器或搜索引擎spider發(fā)送一個(gè)頁(yè)面請(qǐng)求時(shí),Web服務(wù)器就會(huì)檢查一個(gè)名為'.htaccess'的文件,這個(gè)文件指明了如何處理頁(yè)面請(qǐng)求,通過(guò)修改設(shè)置'.htaccess'文件就可以告知搜索引擎某個(gè)頁(yè)面是302轉(zhuǎn)向(臨時(shí)跳轉(zhuǎn))還是301重定向(永久性跳轉(zhuǎn))。有的Linux主機(jī)服務(wù)器還支持你在管理后臺(tái)直接設(shè)置301轉(zhuǎn)向。如果不能在后臺(tái)設(shè)置,實(shí)現(xiàn)301重定向步驟也很簡(jiǎn)單:新建一個(gè)文件名為.htaccess.txt的文檔(注意前面的點(diǎn)號(hào)不能遺漏),在txt文檔中寫(xiě)入以下301轉(zhuǎn)向代碼:
view source
print?
1
Options +FollowSymLinks
2
RewriteEngine on
3
rewritecond %{http_host} ^yanet.cn [nc]
4
rewriterule ^(.*)$ http://927caipiao.cn/$1 [r=301,nc]
或者
view source
print?
1
RewriteEngine On
2
RewriteCond %{HTTP_HOST} !^
yanet.cn$ [NC]
3
RewriteRule ^(.*)$ http://927caipiao.cn/$1 [L,R=301]
保存文件,將文件名稱末尾的.txt去掉,上傳到網(wǎng)站根目錄即可。上面的代碼表示整站所有的以帶www的域名927caipiao.cn為地址的網(wǎng)頁(yè)都會(huì)301轉(zhuǎn)向到不帶www的域名yanet.cn(不僅是首頁(yè),子目錄/網(wǎng)頁(yè)也可以)。如果是其他域名要重定向到 yanet.cn 這個(gè)新域名,則在.htaccess文件中加入如下重定向代碼:
view source
print?
1
Options +FollowSymLinks
2
RewriteEngine on
3
RewriteRule ^(.*)$ http://927caipiao.cn/$1 [L,R=301]
Windows主機(jī)IIS下的301轉(zhuǎn)向設(shè)置
在IIS 管理后臺(tái) -> 選擇你要重定向的文件或文件夾 -> 右鍵"重定向到URL" -> 輸入需要轉(zhuǎn)向的目標(biāo)URL ->選擇"資源的永久重定向"。
另外,如果你的Windows虛擬主機(jī)空間支持ISAPI_Rewrite,那么在IIS下利用ISAPI_Rewrite不僅可以實(shí)現(xiàn)url 重寫(xiě),還可以用來(lái)設(shè)置301轉(zhuǎn)向,下面分別是三個(gè)版本的ISAPI_Rewrite對(duì)應(yīng)的帶www的域名301轉(zhuǎn)向到不帶www域名的代碼:
view source
print?
01
# ISAPI_Rewrite 1.3 版本 域名的301重定向
02
RewriteCond Host: ^www\.farlee\.info$
03
RewriteRule (.*) http\://farlee\.info$1 [I,R]
04
05
# ISAPI_Rewrite 2.x 版本
06
RewriteCond Host: ^www\.farlee\.info$
07
RewriteRule (.*) http\://farlee\.info$1 [I,RP]
08
09
# ISAPI_Rewrite 3.x 版本
10
RewriteCond %{HTTP:Host} ^www\.farlee\.info$
11
RewriteRule (.*) http\://farlee\.info$1 [NC,R=301]
在其他情況下,如不同域名之間在IIS下的301重定向代碼請(qǐng)看詳細(xì)介紹:ISAPI Rewrite實(shí)現(xiàn)IIS 301轉(zhuǎn)向。
PHP 301 重定向代碼
301重定向也可以在php文件中通過(guò)加入php header來(lái)實(shí)現(xiàn),代碼如下:
view source
print?
1
2
header("HTTP/1.1 301 Moved Permanently");
3
header("Location:http://927caipiao.cn/");
4
exit();
5
?>
ASP 301 重定向代碼
view source
print?
1
<%@ Language=VBScript %>
2
<%
3
Response.Status="301 Moved Permanently"
4
Response.AddHeader"Location", http://yanet.cn
5
%>
ASP.NET 301 重定向代碼
view source
print?
1
CGI Perl下的301轉(zhuǎn)向代碼
view source
print?
1
$q=newCGI;
2
print$q->redirect("http://927caipiao.cn/");
JSP下的301轉(zhuǎn)向代碼
view source
print?
1
<%
2
response.setStatus(301);
3
response.setHeader("Location", "http://927caipiao.cn/");
4
response.setHeader("Connection","close");