WordPress Permalink 與 IIS 用的 ISAPI_rewrite

本篇屬進階功能,適用於裝好WordPress又想挖掘出新功能的人使用.

WordPress 裡有個東西叫做 Permalink, 它是 permanent link 的縮寫. What is that? 簡單的來說它是為了要讓URL看起來更漂亮更易懂, 例如, 如果有一篇文章,它的 URL 是
https://blog.gspirits.org/wp/index.php?p=21

https://blog.gspirits.org/wp/archives/2005/03/26/DECT數位無線電話/
哪一個容易懂? 當然是後者,一眼就可以看出是 2005 年 3 月 26 日的文章, 標題是”DECT數位無線電話” 😎
不過,很可惜,那只適用於英文篇名,而我們寫的文章篇名通常是中文的,會有問題. 所以,另一個方式是使用下面的格式,
https://blog.gspirits.org/wp/archives/2005/03/26/20/53/24/
也就是說,文章在 2005 年 3 月 26 日 20 時 53 分 24 秒發表,仍然比 index.php?p=21 好多了. 本blog就是用這個方式.

哦? 就這樣? 沒什麼用嘛… 也許你會這樣想. 它之所以被發展出來是有道理的,理由如下:

  1. 第一個原因如上
  2. 搜尋引擎似乎不喜歡參數,如果它搜尋時忽略掉連結中的參數,那你的網站對搜尋引擎會是一片空白. 不過,據我的觀察, google似乎沒這個問題.
  3. 使用者可直接在 URL 上作修改, 就可以瀏覽你的網站, 而不必進到畫面再點選. 例如,
    看 2005 年 3 月 的文章
    https://blog.gspirits.org/wp/archives/2005/03/
    看 2005 年 3 月 20 日的文章
    https://blog.gspirits.org/wp/archives/2005/03/20/
    也是很 cool.

當然這些對我們小小的blog是功用不大, 所以我在前一篇才說這不是必要的功能. 但這個對大型的網站,尤其是購物網站,就非常有用了.

要使用這個功能要有一個URL rewrite的模組,Apache web server有內建的 mod_rewrite 模組,但是 IIS 的用戶可就沒那麼幸運了(該死的Microsoft :mad:),還好有一家叫作Helicon Tech的公司設計了同樣功能的產品,更好的是Lite版本是免費的,在這裡可下載.

這個東西就是將 URL 依據規則(Rule) 重新改寫,而這其中最重要的就是這些規則了,這些規則決定了如何將網頁伺服器應用程式的語法與呈現給用戶看的 URL 作翻譯. 規則本身很難懂,又是一堆外星文,我是參考了這個仁兄這個仁兄的例子完成的,如下:

# WordPress rewrite rules
RewriteRule /wp/archives/category/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp/wp-feed.php\?category_name=$1&feed=$2 [I,U,O]
RewriteRule /wp/archives/category/?(.*)/ /wp/index.php\?category_name=$1

RewriteRule /wp/archives/author/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp/wp-feed.php\?author_name=$1&feed=$2 [I,U,O]
RewriteRule /wp/archives/author/?(.*) /wp/index.php\?author_name=$1 [I,U,O]

RewriteRule /wp/feed/?([_0-9a-z-]+)?/?$ /wp/wp-feed.php\?feed=$1 [I,U,O]

RewriteRule /wp/archives/([0-9]{4})?/?([0-9]{1,2})?/?([0-9]{1,2})?/?([0-9]{1,2})?/?([0-9]{1,2})?/?([0-9]{1,2})?/?([0-9]+)?/?$ /wp/index.php\?year=$1&monthnum=$2&day=$3&hour=$4&minute=$5&second=$6&page=$7 [I,U,O]
RewriteRule /wp/archives/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$ /wp/wp-feed.php\?year=$1&monthnum=$2&day=$3&hour=$4&minute=$5&second=$6&feed=$7 [I,U,O]
RewriteRule /wp/archives/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2})/trackback/?$ /wp/wp-trackback.php\?year=$1&monthnum=$2&day=$3&hour=$4&minute=$5&second=$6 [I,U,O]

這些東西要寫在 C:\Program Files\Helicon\ISAPI_Rewrite\httpd.ini 裡.

基本上前面的是 regular expression 後面是 format string. 看不懂? 我也不懂 😀 想知道詳情,請看ISAPI_rewrite的document… 如果你都做對了,在管理畫面Options的Permalinks中,structure用/archives/%year%/%monthnum%/%day%/%hour%/%minute%/%second%/, update存起來,恭喜你,你的blog就有Permalink的功能了!

UPDATE 4/26/2005

本Blog的網頁伺服器已經換成Apache了,WordPress會自動產生rewriterule,不用維護上面的東西了.

(Visited 9,193 times, 1 visits today)

發佈留言