如何解決 IIS 上的 WordPress 中文網址解析錯誤問題

如何解決 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'] : '';

fix-iis-wordpress-chinese

將後面出現的「$_SERVER['PATH_INFO']」取代為「mb_convert_encoding($_SERVER['PATH_INFO'], 'UTF-8', 'BIG5')」。

fix-iis-wordpress-chinese

如果你統一執行「$_SERVER['PATH_INFO']」取代為「mb_convert_encoding($_SERVER['PATH_INFO'], 'UTF-8', 'BIG5')」也是可以。

2. 搜尋「$_SERVER['REQUEST_URI']」,可以找到以下語法:

list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );

fix-iis-wordpress-chinese

將「$_SERVER['REQUEST_URI']」取代為「mb_convert_encoding($_SERVER['REQUEST_URI'], 'UTF-8', 'BIG5')」。

fix-iis-wordpress-chinese

語法說明

語法 $_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 檔案後,不需要重啟伺服器就會生效了。

fix-iis-wordpress-chinese

提醒一下,如果你的網站有類似的問題,你可能在每次 WP 更版時,都需要重新做一次這個修改,因為 WP 更版可能會更新 class-wp.php 這檔案,就會導致你的設定不見了。

相關學習文章

如果你在學習上有不懂的地方,需要諮詢服務,可以參考站長服務,我想辨法解決你的問題
如果文章內容有過時、不適用或錯誤的地方,幫我在下方留言通知我一下,謝謝

加入社團一起討論

關注我的 IG