{wp plugin} 讓舊網址鍊結自動導向到新網址的利器— Redirection

當初考慮從 b2evolution 轉移到 wordpress 系統時,其中一個讓我猶豫遲未轉移的主要原因是,包括 Google 等搜尋網站與其它諸多網站均有指向我諸多文章的固定鍊結 (permalink),一旦轉移後,自然地原有這些文章的鍊結就會失連了。 除了對支持貼上我文章鍊結的網友們感到抱歉外,同時也會影響到所謂的 SEO (Search Engine Optimization)。

不過衡量諸多利弊得失後,還是長痛不如短痛,咬著牙給轉移到 wordpress 系統來了。 結果有一個驚喜是,發現到 wordpress 可以自行設定可讀性較高的固定鍊結 (permalink)格式,所以從 b2evolution 轉檔的時候,我就有個想法,可以把原來舊文章的固定鍊結給寫入到 wp_posts Table 的 Post_name 欄位內,它其實對應的就是文章所謂的 Slug,文章標題的代稱 (Alias)。 原來是打算當在 wordpress 設定固定網址的格式為 %postname% 時,就會在網址列 (url)顯示這個 Slug 內的鍊結名稱,這樣的話舊有的文章鍊結就可以保存了。 但是事與願違,儲存在 Slug 欄位的舊文章鍊結格式例如為這樣:

am_ac_acce_fa_mc_a_fc_a_af_ac_acc

當你設固定鍊結格式為 %postname% 時,該篇文章的完整 URL 鍊結為:

http://www.kenming.idv.tw/am_ac_acce_fa_mc_a_fc_a_af_ac_acc

但其實其它網站所指向本站舊文章的 URL 鍊結為:

http://www.kenming.idv.tw/index.php?title=am_ac_acce_fa_mc_a_fc_a_af_ac_acc&more=1&c=1&tb=1&pb=1

多了 “title=” 以及 “&more=1&c=1&tb=1&pb=1″。 所以除非我當初在轉檔時是轉成這樣的格式並儲存在 Slug 欄位才可以。

再繼續爬文研究,才瞭解到舊網址鍊結是可以經過一些設定後,給重新導向 (redirect)到新網址的鍊結來的。 主要的原理就在於所謂的 301 條款,可以參考 Wikipedia 這一篇的說明: URL redirection。 簡單的說就是將舊網址的鍊結,透過 HTTP 301 的永久轉移 (moved permanently),而可以重新導向到新的網誌鍊結。 在 Apache 的具體作法就是更改 .htaccess 檔案,例如,當你在 wordpress 後台將固定網址 (permalink)設定為自訂結構 (如 %postname%)後,在 wordpress 根目錄下就會自動產生一個 .htaccess 檔案,其內容如下:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

當然,前提是 Apache 要能支援 .htaccess 與 mod_rewrite 才是 (有些虛擬主機廠商預設沒有提供)。

所以,解法就很明白了,就是在 .htaccess 寫上新舊網址鍊結的對應規則就好了。

問題是,要能撰寫如上看來挺不人性化的陳述,就要能搞懂兩個東西。 一個是 apache 的 Rewrite 規則 (Rule),另一個就是所謂的正規語句表示法 (regular expression)。 又要再研讀這些相關的文件,對我實在太辛苦了,我只想透過一些簡單的對應機制,來達成我的要求就好了。

嗯,wordpress 最強大的就是在於 plugin 的支援了。 爬文找了一找,總共有三個比較普遍的插件,有支援所謂的 301 Redirect: Permalinks Migration, Permalink Redirect, Redirection。 第一個相當精簡,也已經蠻久沒有繼續更新維護了;第二個功能蠻多樣化的,甚至可以將站內的文章網址鍊結給唯一化。國內似乎有蠻多用戶都是用這一個插件的,可惜對我要將原來是 b2evoltuion 的鍊結格式重導向為 wordpress 較通用的 %postname% 連結格式,卻一直試不出來,故而放棄。 反而是最後這一個插件 Redirection,一用就上手,而且還可以設定多種不同對應的重導向規則,例如針對單一文章鍊結、Archive 月份目錄文章鍊結、RSS/Atom 鍊結等對應設定,甚至還有 Log 紀錄重導向的計數,真的功能強大,太適合我了!

下載 Redirection Plugin 解壓縮安裝後,在其 [Group] 的設定視窗中,設定舊的網址鍊結與相對應新的網址鍊結,一次設定一組對應,並且可以儲存多組的 Redirection 對應。 詳細的設定參考文件,可以參考作者的網站:Redirection Online Document

除了可以是對應一組特定的鍊結,當然也可以利用常規表示法 (regular expression),以參數化的方式來設定樣式。 以上述我那個原來是 b2evolution 的舊網址鍊結,我需要過濾掉 “title=” 以及 “&more=1&c=1&tb=1&pb=1″,所以在 Redirection 是這樣設定的:

Source URL: index.php[?]title=(.*)&more=1&c=1&tb=1&pb=1
Target URL: $1

然後要將「regular expression」選項勾選起來。

又如我原來 Blog RSS 是透過 http://www.kenming.idv.tw/?tempskin=_rss2 與 http://www.kenming.idv.tw/?tempskin=_atom 兩種協定來訂閱的,而在 wordpress 預設的 RSS 訂閱網址則為: http://www.kenming.idv.tw/feed 與 http://www.kenming.idv.tw/feed/atom,所以對應的設定的規則為 (底下兩個設定是針對特定的網址鍊結,所以並非是以 regular expression,所以該選項不要勾選):

Source URL: /?tempskin=_rss2
Target URL: feed

以及:

Source URL: /?tempskin=_atom
Target URL: feed/atom

參考下圖,就是我的設定畫面,一共設了三組。 以此類推,如果你有許多舊的固定網址鍊結要保留的話,儘管就是設定一組組的對應。 至於設定是否有成功,如何看呢? 很簡單,就是看 URL 對應表中,有個 Hits 欄位,若是有其它網站或讀者們透過該舊的 URL 鍊結連進來的話,就會 Log 紀錄下來,甚至還可以追蹤來源的 IP Address。 看看下圖的 Hits 點擊率,才半天的時間而已,就已經有近 3000 個 Hits 是透過舊的固定鍊結連接並重導向到新的固定鍊結來的,所以要是疏忽沒有照顧已有的讀者與搜尋引擎們,要再建立起新網站系統的 “口碑”,可是又要再耗費上一些時間,實在可惜。

wordpress_plugin_redirection-screenshot

該插件功能看來相當強大,諸多設定我也不會,我也不想再去研究,有興趣且有需要的站長們倒是可以詳讀該線上文件。反正,能達成我的需求,能將原來舊有文章的固定鍊結給成功地重導向到新的固定鍊結格式,解決了我原先的猶疑,可以說是相當地欣慰滿足了。 🙂

文章導覽

   

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *