最近剛把wordpress博客從linux服務器更換到windows服務器,無意間發現中文標簽點擊報404錯誤(后來百度只有iis環境才會有這個問題),找不到頁面,404錯誤對seo優化肯定是不又好的,所以趕緊想辦法處理,剛開始以為數據沒有轉移完全,又重新轉移了一次,但是故障依舊,沒有辦法,還是得需要解決啊,于是百度搜索“wordpress 中文標簽404”,很多完美解決方案就唰唰的出來了.
首先找了一個方法馬上通過FTP測試,發現神奇的中文標簽可以用了.
方法如下:
1.在網站的根目錄的wp-includes文件夾中找到“rewrite.php”這個文件。
2.備份一下“rewrite.php”,以防修改出錯(改代碼之前我們都最好備份一下原代碼).
3.打開“rewrite.php”文件中我們找到如下代碼:
function get_tag_permastruct() {if (isset($this->tag_structure))
{return $this->tag_structure;}if (empty($this->permalink_structure)) {
//修改這句
ag_structure = '';return false;}if
將其中的:
" if (empty($this->permalink_structure)) { ”
修改為
“ if (!empty($this->permalink_structure)) { "
注意這個里面只加了一個英文“!”號。
雖然中文tag標簽沒問題了,但是去訪問內頁的時候,發現偽靜態失效了,沒辦法只能還原剛才修改的rewrite.php文件(記得修改任何文件之前都要備份),繼續搜索其他方法……
終于功夫不負有心人,又找到一個完美方案,測試中文404真的沒有報錯了,方法如下:
1.打開wp-include文件夾,找到并打開編輯class-wp.php文件.
2.查找代碼:
$pathinfo = $_SERVER['PATH_INFO'];
把這句代碼替換成:
$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");
3.查找代碼:
$req_uri = $_SERVER['REQUEST_URI'];
把這句代碼替換成:
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");
由于自己較懶惰,方案里面提供了修改好的class-wp.php文件,于是我直接下載上傳了,測試頁面偽靜態也沒有問題,其他訪問也沒問題.
第二天我去發布文章,上傳圖片的時候發現圖片上傳不了,以為是自己開的CDN加速的原因,于是乎用測試域名去測試發現還是無法上傳,以為是插件沖突了,全部停止還是不行,再次懷疑自己轉移數據沒有轉移完全,再去轉了一次,重新轉移測試圖片上傳成功,又去把之前修改的class-wp.php文件上傳以后,去測試圖片上傳失敗,還原此文件上傳成功.
終于找到原因了,原來上面的方法還是有瑕疵,再去仔細一看教程,原來只適用wordpress3.5以下的版本.
心灰意冷,再去找方法,終于找到一個適用于wordpress4.1版本的方法,如下:
1.首先找到wordpress的wp-includes目錄下-》class-wp.php文件,進行如下修改就可以解決在Windows系統下部分中文標簽無法打開的情況。
2.wp-includes/class-wp.php 153 行:
$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : '';
修改為:
$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? mb_convert_encoding($_SERVER['PATH_INFO'],'utf-8', 'GBK') : '';
3.wp-includes/class-wp.php 157 行:
list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
修改為:
list( $req_uri ) = explode( '?', mb_convert_encoding($_SERVER['REQUEST_URI'], 'utf-8','GBK') );
然后將class-wp.php文件保存并上傳覆蓋原文件,然后再全面測試偽靜態、中文標題、圖片上傳都正常,此時終于完美解決.
在搜索的時候還找到了其他方法,未測試不知道是否可以解決,版本不同,方法不同,可以自行參考.
WordPress3.1之前版本,方法如下:
打開 WP-include/classes.php(3.1之前版本)或WP-include/class-wp.php(3.1+之后版本,下文稱新版)找到第154行(新版為142行),把:
$pathinfo = $_SERVER['PATH_INFO';
替換為:
$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], 'UTF-8', 'GBK');
找到第159行(新版為147行),把:
$req_uri = $_SERVER['REQUEST_URI';
替換為:
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], 'UTF-8', 'GBK');
還有方法如下:
登錄wordpress后臺,在文章標簽里。給每一個含中文的Tags標簽,加上一個標簽別名。“別名” 是URL友好的另外一個名稱。它通常為小寫并且只能包含字母,數字和連字符。
對于上百個以上中文Tags標簽的博客,此種方法工作量巨大。
還有說是ISAPI_Rewrite偽靜態的規則沒有寫好才導致找不到網頁文件的,其實就是更改一下規則就可以了,之前的tag偽靜態的規則.
RewriteRule /tag/(.*)$ /index/.php/?tag=$1
更改后的規則:
RewriteRule /tag/(.*)/$ /index/.php/?tag=$1
新聞熱點
疑難解答
圖片精選