PHP 半調子 Kirin 研究好一段時間才找到解法,很奇怪,若是固定網址使用下列格式:
/index.php/%year%/%monthnum%/%day%/%postname%/
當文章代稱(slug)為中文的時候就一定掛點。
剛開始,從好幾個方面下去著手,結果都不是 Kirin 所想的那樣。最後,竟然是 preg_match() 出錯,好吧!直接加上 index.php 試試看,竟然給我瞎碰對…XD
試了一下,好像很正常,總之現在虛擬主機可以用固定網址功能。
修改檔案:wp-includes/classes.php,位置:
Line 87 行:
$request_match = $request;
改成
$request_match = $wp_rewrite->index.'/'.$request;
更新:
這個方法比較不會影響到首頁的速度:2.1 請在 76 行(2.0 請在 1535 行)之後加入下面兩行:
if ($wp_rewrite->using_index_permalinks())
$req_uri = $wp_rewrite->index;
再度更新:
努力研究一下,發現是 2.1 版 61 行(2.0.7 版 1520 行)那邊使用 $pathinfo 對 $req_uri 代換的時候有問題。應該改成下列這樣:
$req_uri = str_replace($pathinfo, '', urldecode($req_uri));
把 2.1 跟 2.0 的 diff 弄一下,開了個 Ticket 丟上 WordPress Trac 去。Rayn 動作真快,沒一會兒就看到,不過得先確定在其他環境下面這樣做沒有問題才行。這外國人還滿仔細的咪~
如果有朋友不是使用 apache 2 的伺服器請幫忙測試回報一下吧!