定義
301永久重定向:這是SEO中的一個基礎名詞,在URL規範化中會用到,也許大家都知道這個名詞,但是由於套用的不是非常頻繁,導致很多專業做SEO的朋友都不是很熟悉301永久重定向的具體操作方法,下面闡述的是301永久重定向的理論,以及實際的操作方法
作用
301永久重定向是所有的重定向方法中一種符合搜尋引擎規則的重定向方法,其他的重定向還包括302暫時重定向和JS跳轉等,這些方式都容易導致URL不規範問題的產生。所以說如果你有多個域名都希望可以讓他們訪問同一個網站,那就只能將其中一個做為主域名,剩下的其他域名做301永久重定向到這個主域名,只有這樣才可以讓多個域名都訪問一個站點,不會產生重複收錄,導致網站被懲罰的現象
執行方法
301永久重定向有幾種不同的做法,在windows主機上和Unix/Linux主機是不同的。
在windows主機上設定的方法
可以在IIS伺服器上設定也可以在代碼中設定。
1、在IIS伺服器上設定301的方法
這種設定方法需要有一個先天條件,那就是你有伺服器的管理權,你可以直接操作IIS伺服器,並且可以隨意開通新的虛擬主機,否則你只能用修改網站代碼的方法。
首先開通一個新的虛擬主機,將你需要做301永久重定向的域名正常與該空間綁定,這個綁定的方法你可以諮詢伺服器託管商。
然後打開“控制臺”→找到“管理工具”→打開“Internet 信息服務”。打開後,可以在管理器左側樹形選單中找到你的網站,然後右擊選擇“屬性”,打開網站的屬性管理面板(如下圖),並且選擇到“主目錄”選項卡,選擇“重定向到URL”,然後在地址框中輸入“主域名”,然後將選項卡中的“資源的永久重定向”選擇上,點擊確定即可設定完畢。
2、在網站代碼中設定301的方法
只需要將以下代碼加在網頁的開頭即可,不過只能用在ASP和PHP檔案中,HTML無法通過代碼設定301。
ASP代碼: !
<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently" Response.AddHeader "Location" , " http://www.###.com"
%>
PHP代碼:
<?
Header( “HTTP/1.1 301 Moved Permanently” );
Header( “Location: http://www.###.com” );
?>
註:將我的網址替換成你自己的定向後的目標網址即可,所有的標點必須用英文半角。
3、在部落格中設定301的方法
這邊以Z-Blog為例詳細介紹一下:
1.複製如下代碼,將代碼中“###.com”改成你自己的網址即可。
if request.ServerVariables("SERVER_NAME")="###.com" then
Response.Status="301 Moved Permanently"
Response.AddHeader "Location", "http://www.###.com"
Response.End
end if
2.進入Z-Blog後台,打開“檔案管理”界面。
3.找到並打開網站根目錄下的 default.asp 檔案。
4.將以上代碼加進 default.asp 在下圖中紅框所示位置。
5.最後確定無誤點擊 提交 保存。
在Unix/Linux主機上設定的方法
可以用.htaccess檔案
1. Apache模組 mod_alias的 Redirect 和 RedirectMatch命令
上面提到2個命令使用方法相似。而區別就是後者RedirectMatch基於正則表達式匹配對當前的URL傳送一個外部重定向語法為:
Redirect [status] URL-path URL
RedirectMatch [status] regex URL
status參數可以使用以下HTTP狀態碼:
permanent
返回一個永久性重定向狀態碼(301),表示此資源的位置變動是永久性的。
temp
返回一個臨時性重定向狀態碼(302),這是默認值。
seeother
返回一個“參見”狀態碼(303),表示此資源已經被替代。
gone
返回一個“已廢棄”狀態碼(410),表示此資源已經被永久性地刪除了。如果指定了這個狀態碼,則URL參數將被忽略。
舉例:
APACHE
Redirect 301 /old/old.htm http://www.###.com/new.htm Redirect permanent /one http://###.com/two RedirectMatch 301 (.*).gif$ http://www.###.com/images/$1.jpg |
2.使用mod_rewrite重寫URL方式
APACHE
Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^####.comRewriteRule ^(.*)$ http://www.###.com/$1 [R=permanent,L] |
在這裡判斷當前伺服器變數HTTP_HOST是否等於###.com,為真就進行重寫,按照R=permanent進行永久重定向,L表示並立即停止重寫操作,並不再套用其他重寫規則
下面是最終實現的.htaccess檔案,同時也併入wordpress重寫規則。
APACHE
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On #Redirect Options +FollowSymLinks RewriteCond %{HTTP_HOST} ^###.com$ RewriteCond %{HTTP_HOST} !^$ RewriteRule ^(.*)$ http://www.###.com/$1 [R=301,L] #Rewrite(blog) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^blog/.* /blog/index.php [L] RewriteRule . - </IfModule> # END WordPress |
運作流程
讓我們先來了解一下用戶,搜尋引擎和網站一開始的互動流程。當用戶或搜尋引擎向一個網站伺服器發出網頁瀏覽請求時,該伺服器將:
1.通過域名伺服器(DNS)將域名轉換為網站的IP位址,然後返回給客戶
2.打開一個該IP套接口連線
3.記下通過該套接口的一個HTTP數據流
4.從WEB伺服器接收一個回響請求的HTTP數據流,該數據流包含狀態碼,狀態碼的值由HTTP協定所決定。這裡所說的“HTTP數據流”信息也叫“頭信息(Header)”。頭信息中包括了日期,伺服器類型,通常還會有一條“200 OK”信息。如果一切良好,那么網路伺服器就會將“200 OK”信息以及請求頁面傳送出去。如果網站在這時候已經建立了重定向,那么伺服器就會在頭信息中包含一個“302 Moved Temporarily”或“301 Moved Permanent”之類的回響信息。搜尋引擎會根據伺服器頭信息中的內容作出決定。