如何解決 IIS 上的 WordPress 中文網址解析錯誤問題
如果將 WordPress 架設在 IIS 之上,當使用中文網址時就會出現問題,發生找不到網頁的問題。
其原因是 IIS 上的中文網址編碼預設採用 Big5,而 WordPress 預設採用 UTF-8 編碼,當讀取網址時就會發生找不到網頁的問題。
我們可以修改 WordPress 讀取網址的編碼設定,轉成 UTF-8 就會正常了。
修改設定
我修改的 WordPress 版本為 5.9.2,如果你的版本與我不同,可能在語法上會有稍微的不同,但只要把握其重點,就可以適應不同的版本。
開啟 WordPress 內的檔案 \wp-includes\class-wp.php
1. 搜尋「$_SERVER['PATH_INFO']
」,可以找到以下語法:
$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : '';
將後面出現的「$_SERVER['PATH_INFO']
」取代為「mb_convert_encoding($_SERVER['PATH_INFO'], 'UTF-8', 'BIG5')
」。
如果你統一執行「$_SERVER['PATH_INFO']
」取代為「mb_convert_encoding($_SERVER['PATH_INFO'], 'UTF-8', 'BIG5')
」也是可以。
2. 搜尋「$_SERVER['REQUEST_URI']
」,可以找到以下語法:
list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
將「$_SERVER['REQUEST_URI']
」取代為「mb_convert_encoding($_SERVER['REQUEST_URI'], 'UTF-8', 'BIG5')
」。
語法說明
語法 $_SERVER['PATH_INFO']
、$_SERVER['REQUEST_URI']
是從伺服器上取得資訊,也就是從 IIS 上取得網址資訊。
函數 mb_convert_encoding 轉換字符編碼。
mb_convert_encoding(array|string $string, string $to_encoding, array|string|null $from_encoding = null): array|string|false
將 string 類型 str 的字元編碼從可選的 from_encoding 轉換到 to_encoding。 當參數 string 是一個 array 時,將遞迴轉換它所有的 string 值。
我們將原本為 BIG5 的編碼轉為 UTF-8 編碼。
當修改 class-wp.php 檔案後,不需要重啟伺服器就會生效了。
提醒一下,如果你的網站有類似的問題,你可能在每次 WP 更版時,都需要重新做一次這個修改,因為 WP 更版可能會更新 class-wp.php 這檔案,就會導致你的設定不見了。
相關學習文章
- WordPress 顯示最後更新日期的 3 種方法 (外掛、程式碼、Post Meta Data) – 提高 SEO 排名
- WordPress 安裝佈景主題遇到 No working transports found 錯誤
如果你在學習上有不懂的地方,需要諮詢服務,可以參考站長服務,我想辨法解決你的問題
如果文章內容有過時、不適用或錯誤的地方,幫我在下方留言通知我一下,謝謝