[WordPress] 在 IIS 使用固定網址(Permalink)
Apache 有個非常強大好用的 mod_rewrite 模組,可以實現 URL Rewriting,運用在網站或部落格對 SEO 會有幫助。WP 的固定網址也是這類的運用,一般架設在 Apache 不會有什麼問題,只要有啟用 mod_rewrite 就 OK,不過如果是裝在 IIS 上,那就會看到很醜的 /index.php/aaa/bbb/123 這樣的網址,本篇就是教大家如何讓 IIS 真正擁有 rewrite 的功能。
首先必須安裝 for IIS 的擴充,微軟有針對 IIS7 開發一套 URL Rewrite Module,不過 IIS6 就只能用別的,測試很多套最後選擇 ISAPI_Rewrite,因為它幾乎相容 .htaccess、mod_rewrite 語法,也比較穩定,ISAPI_Rewrite 有分要錢的 full 版和免費的 Lite 版,差異請看這篇,目前選 Lite 就夠用了。
Step 1
先設定 WordPress ,進入後台選擇想要的固定網址格式,如「/%year%/%monthnum%/%day%/%postname%.html」,記得把前面 index.php 拿掉。

Step 2
安裝好 ISAPI_Rewrite 3 Lite,編輯安裝目錄下的 httpd.conf 設定檔,內容範例:
# 假設WP網址為 http://aaa.domain.com/blog/
RewriteCond %{HTTP_HOST} ^aaa\.domain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/blog/ /blog/index\.php [L]
# 假設WP網址為 http://bbb.domain.com
RewriteCond %{HTTP_HOST} ^bbb\.domain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index\.php [L]
Step 3
基本上完成前兩個動作固定網址就可以運作了,但是如果網址帶有中文就會發生 404 錯誤,原因可以參考這篇,修改 wp-includes/classes.php
// 找到 $pathinfo = $_SERVER['PATH_INFO']; // 改成 $pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], 'UTF-8', 'BIG5'); // 找到 $req_uri = $_SERVER['REQUEST_URI']; // 改成 $req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], 'UTF-8', 'BIG5');
這樣就正常了。註:PHP 必須啟用 mbstring。












近期迴響