[SEO技術分享] htaccess重新導向 帶參數頁面一對一轉址語法

先前有介紹過利用.htaccess進行301轉址

但當一個網站改版時有可能使用技術不同,因此舊網站的網址規則可能與新網站的網址規則不同,最常見的情況就是舊網站網址包含了很多參數,例如:http://www.domain.com/index.php?id=29&page=15
而新網站則有將網址靜態化過,URL是這樣:
http://www.domain.com/product/27
如果改版沒注意到網址重新導向的問題,有些使用者很能是將頁面存入書籤,透過舊網址舊無法正確到達改版後的新頁面,又或是搜尋引擎會無法抓取到舊的網址,新的網址權重就需要重新計算,這時候使用301轉址把就頁面權重移轉到新頁面就顯得非常重要!
今天要講的是帶有參數頁面對頁面的進階轉址方式
來看看範例吧!
舊網站的某個網址:
http://www.domain.com/index.php?cmsid=29&page=15
要跳轉的目標新網址是:
http://www.domain.com/product/27
舊又因為網址一致性不良
有許多URL都可以到達同樣頁面,像是:
http://www.domain.com/index.php?cmsid=29&car_id=15&no=true
首先我們要釐清新舊網址的對應關係
其中cmsid=29是分類,對應的是新網站的product
car_id=15則是分類當中的項目,對應新網站的27
no=true是多餘參數
轉址開始囉!
完整語法是這樣
RewriteEngine On
RewriteCond %{QUERY_STRING} ^cmsid=29&page=15.* [NC]
RewriteRule index.php http://www.domain.com/detail/27? [R=301,L]
後面我們會詳細介紹每個指令是在做什麼
轉址最基本的是.htaccess要把轉址功能打開
RewriteEngine On
接著寫轉址的條件
RewriteCond %{QUERY_STRING} ^cmsid=29&page=15.* [NC]
這整句的是意思是找到URL中查詢參數符合以cmsid=29&page=15為開頭無論後面包含什麼字元、不分大小寫為條件
%{QUERY_STRING}的意思是擷取URL當中?後面的參數內容
^是以什麼字串為開頭
.*是不論後面包含什麼
[NC] 意思是No Case不分大小寫
再來就是轉址的規則囉
RewriteRule index.php http://car.guam.com.tw/detail/27? [R=301,L]
符合規則的index.php頁面
都要跳轉到http://car.guam.com.tw/detail/27
?則是要丟棄原本的參數
R=301指的是永久轉址
L則表示這是最後一行規則
如果有多行條件則使用[N] “下一行”或是[OR] “或”
使用範例如下:
RewriteCond %{QUERY_STRING} ^cmsid=29.* [NC,OR]
RewriteCond %{QUERY_STRING} ^cmsid=28.* [NC]
RewriteRule index.php http://www.domain.com/? [R=301,L]
看出這個範例的結果了嗎?
http://www.domain.com/index.php?cmsid=29不管這後面,不管有什麼不管大小寫
或是
http://www.domain.com/index.php?cmsid=28不管這後面,不管有什麼不管大小寫
都要跳轉到
http://www.domain.com/
301轉址在網站改版或網站搬遷時又不失舊有使用者和搜尋引擎流量是非常重要的一件工作喔!