趙健的技術筆記

wordpress在IIS主機下URL重寫實現靜態化完美解決方案

技術 約 1218 字 · 4 分鐘 - 次閱讀

首先需要你的網站空間服務商支持自定義錯誤頁,然後創建一個utu-8格式的404.php文件,代碼如下:

<?php
header("HTTP/1.1 200 OK");
$ori_qs = strtolower($_SERVER['QUERY_STRING']);
$pattern = '/[^;]+;[^:]+:\/\/[^\/]+(\/[^\?]*)(?:\?(.*))?/i';
preg_match($pattern, $ori_qs, $matches);
$_SERVER['PATH_INFO'] = $matches[1] . '?' . $matches[2];
$_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO'];
$query_args = explode('&', $matches[2]);
unset($_GET);
foreach ($query_args as $arg)
{
$the_arg = explode('=', $arg);
$_GET[$the_arg[0]] = $the_arg[1];
}
include('index.php');
?>

創建好之後上傳至網站根目錄下,然後自定義錯誤頁為404.php頁。這樣就可以去後台-設置-固定鏈接設置而實現靜態化了。但是這個方法會導致中文標籤和一些相關地方的tags無法找到,解決辦法是超找wp-include/classes.php中如下代碼:

if ( isset($_SERVER['PATH_INFO']) )
$pathinfo = $_SERVER['PATH_INFO'];
else
$pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = $_SERVER['REQUEST_URI'];

修改為:

if ( isset($_SERVER['PATH_INFO']) )
$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], 'utf-8', 'GBK');
else
$pathinfo = ";
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], 'utf-8', 'GBK');
分享:

評論