前幾天由于各種原因,韋文成博客所在服務器系統從Linux換回到了Windows 2003,博客也因此幾天沒能正常訪問。
韋文成博客所使用的是Wordpress系統,在Nginx下進行偽靜態是相當容易十分簡單的事情,可是使用了IIS6就不是那么回事了,網上找了些IIS下Wordpress進行偽靜態的方法,但大都不理想,比如利用404,利用ISAPI_ReWrite進行偽靜態,總會有這樣那樣的問題。
無意中發現可以利用WordPress URL Rewrite完美解決遇到的問題。
Windows2003 IIS6下配置WordPress偽靜態方法:
1.下載WordPress URL Rewrite組件
下載地址:http://www.binaryfortress.com/wordpress-url-rewrite
WordPress URL Rewrite主要功能與特色:完全無需人工干預,全自動重寫URL,只需要在后臺設置好固定鏈接(Permalinks)形式,就能直接使用,就像linux下用htaccess一樣。可以使用在一級目錄和子目錄,也可以排除不需要重寫的目錄。這個非常方便,對于某些目錄不需要URL重寫的就將其排除,不會造成無法訪問。因為全自動,所以免去了在寫重寫規則時候遇到的規則重復造成部分目錄和文件無法實現的情況。
2.安裝WordPress URL Rewrite
把下載的壓縮包解壓到任何地方,只要保證WordPressURLRewrite.ini和WordPressURLRewrite32.dll(32位版本,64位版本對應為64.dll)在同一文件夾下就可以了。
然后打開WordPressURLRewrite.ini設置你的博客目錄,以及需要排除的目錄,Readme.txt里有詳細說明,這里就不細說了。
接下來,在IIS中選擇相應的站點,在ISAPI篩選器中加載WordPressURLRewrite32.dll就可以了,加載完重啟IIS或者停止網站再啟動即可。

注意:要給dll所在的目錄加上IIS_WPG組的寫入權限,否則無法加載對應dll文件。
如果箭頭紅色并且向下,請嘗試檢查組件文件夾的權限。
到此配置已經完全OK了,因為韋文成博客的文章、欄目、tag別名均是用的英文,但是如果你的博客路徑存在中文名,就得往下看了(以下方法為轉載,未親自測試)。
存在并需要解決的問題:
(1)中文的tag無法訪問
解決辦法:需要使用ISAPI_Rewrite來寫一條規則:
RewriteRule /tag/(.*) /index.php?tag=$1
(2)含有中文的網址不能訪問
1.安裝ISAPI_Rewrite
網站根目錄下新建立一個httpd.ini文件,用記事本或是EditPlus打開,規則寫在httpd.ini里,如下:
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule /tag/(.*)/ /index.php?tag=$1
現在中文tag是能訪問了,但是還是存在問題。
存在的問題:
(1) tag頁面的文章超過1頁,翻頁時都不能訪問
解決辦法:修改這條規則為:
RewriteRule /tag/[^/]+)/([^/]+)/?([0-9]+)?/ /index.php?tag=$1&paged=$3 [L]
但是修改之后中文tag又不能訪問了,別擔心,接著看下一步。
2.修改wp-include中的classes.php
繼續修改第1步中的問題,因為修改Rewrite規則之后中文tag還是不能訪問,含有中文的網址也不能訪問。最好使用專門的PHP編輯器工具,如EditPlus。
原代碼:
$pathinfo = $_SERVER['PATH_INFO'];
替換為:
$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");
原代碼:
$req_uri = $_SERVER['REQUEST_URI'];
替換為:
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");
修改后保存,然后將保存好的classes.php文件上傳并覆蓋原文件即可,注意文件保存格式。
注:在本文復制代碼可能會出現中文標點符號,請統一改成英文符號,以免出錯。
本文首發韋文成博客,原文地址:http://www.weiwencheng.com/wordpress/win2003-iis6-wordpress-rewrite/