wordpress預設固定網址(Permalink)是http://siteurl/wordpress/?p=123這樣的網址形式,一來是網址中p後面的數字(文章id)不雅觀,二來是沒辦法做好search engine的SEO,因此大多站都改為http://siteurl/year/month/postname這樣的格式。

要使wordpress會依照所設定的固定網址轉換,得注意到apache必須要開啟rewrite_module,因為這部份沒做到使我卡了兩三個禮拜...,也因此整理了些資料。

Open Apache Rewrite Module

一開始最重要的就是去修改apache/conf/httpd.conf,將LoadModule rewrite_module modules/mod_rewrite.so 的註解拿掉(刪掉前面的#)即可,這部份參考於官網

基本上,只要做完這個步驟,修改wordpress的固定網址便可成功。步驟:admin→設定(Setting)->固定網址(Permalink)。

修改.htaccess檔案權限

htaccess是網站server在處理URI與Directory間轉換所需使用的規則,wordpress在修改固定網址(Permalink)後會去存取到這個檔案,若你的wordpress是架設在外面購買的server可能會有存取上的問題,所以需修改此檔案的權限。相關修改可以參考香腸魷魚文章

相關的Plugin

假設你的wordpress站已經累積不少的文章量在做這修改,可能會導致過去一些舊有的連結失效,因此需要這些plugin幫你導向至最新的Permalink上。

Dean's Permalink Migration的衝突Warning

使用這個plugin或許會遇到些warning訊息出現在站台的頁面最上方,像是
Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 1 in /home/snailbir/public_html/designcoyote.com/wp-includes/classes.php on line 210

Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 1 in /home/snailbir/public_html/designcoyote.com/wp-includes/classes.php on line 211


這是因為URI的'?'字元並未被消除掉,導致轉換上的問題,因此需在warning的行數前(ex:210)加入此行程式碼即可

$match = str_replace('?', '\?', $match);

此部分參考至wordpress.org論壇

補充:若很不幸的固定網址或是網誌的url改壞了都沒辦法正常連進去,就要進去資料庫後台(phpmyadmin)修改,wp_options資料表中的siteurl與home這兩個欄位值