在使用 WPML 多國語網站插件時,我遇到了一個導向錯誤問題:當手動輸入語言子目錄網址(例如 https://www.vector.cool/en)時,瀏覽器會被重定向到錯誤網址 https://en/en/www.vector.cool/en/。這不僅造成使用者無法正常瀏覽,也會影響 SEO 評價與網站信任度。
這篇記錄整個問題排查與修復過程,當作自己備忘,也給未來有同樣情況的開發者參考。
問題現象說明
當網站網址輸入為:
https://www.vector.cool/en
卻被重定向為:
https://en/en/www.vector.cool/en/
這不是筆誤,也不是打太快,而是 WordPress 嘗試自動組出語言導向網址時,錯誤地把原本的主機名稱當成路徑一部分,加上語言代碼又重複,加起來就變成像這樣喝醉亂跑的網址。
這不只出現在英文語系,像是:
- 越南語:
https://www.vector.cool/vi→https://vi/vi/www.apachefootwear.com/vi/ - 繁體中文:
https://www.vector.cool/zh-hant也可能被錯誤導向
原因分析
導致這種導向錯誤的主因可能包含以下幾點:
- WPML 的瀏覽器語言自動導向功能錯誤判斷,重複套用語言子目錄。
- **網站未正確定義 **
** 與 **,導致 URL 組合時取得錯誤主機名稱。 - **主題或外掛誤用 **
** 或 **,重複拼接語言代碼。 - Proxy/CDN 層(如 Cloudflare)未傳遞正確 Host header,讓 WordPress 推導出錯。
解決步驟
1. 關閉 WPML 的瀏覽器語言導向
後台 → WPML → 語言 → 將「瀏覽器語言導向」設定為「不要導向」。
若真的需要導向,也建議選擇「僅首頁導向」,避免搞亂子目錄的路徑。
2. 在 wp-config.php 中定義正確的網站 URL
請將以下兩行加入 wp-config.php,建議放在接近檔案底部、但務必在這行之前:
require_once ABSPATH . 'wp-settings.php';
define('WP_HOME', 'https://www.vector.cool');
define('WP_SITEURL', 'https://www.vector.cool');
這樣可以強制 WordPress 使用正確主網址,避免語言代碼被重複拼接或主機名稱不明的情況。
這兩行的優點包括:
- 避免從資料庫讀取錯誤的網址設定
- 阻止外掛使用錯誤的
home_url()拼接邏輯 - 防止 Cloudflare 或 proxy 導致主機名為空
- 對效能沒負擔,反而少查一次資料庫
- 明確指定網址,有助在 staging/dev 環境穩定運作
3. 清除所有快取並重新測試
- 停用所有快取外掛(如 LiteSpeed Cache)
- 清除 Cloudflare 快取(如有使用)
- 使用瀏覽器無痕模式開啟
/en或/vi測試
確認網址是否正確顯示對應語系頁面。
補充:為什麼建議保留 WP_HOME 和 WP_SITEURL
這兩行設定在多語系與 CDN 環境中可以帶來以下好處:
- 強制使用正確的主網址,避免自動推導錯誤
- 避免外掛或主題錯誤拼接語言代碼
- 減少不必要的 redirect,提升穩定性與 SEO 表現
- 不會拖慢網站速度,反而略微減少資料庫查詢
- 更適合部署在有 staging/proxy/CDN 結構的環境中
- 可讀性也不錯,一眼看出網站實際運作的網域
除非未來網站要換網域或搬家,否則這兩行我會選擇長期保留。
總結
WPML 很強大,但有些自動導向功能在實際部署時容易產生副作用。這次的導向錯誤主要與自動語言導向和主機網址判斷有關。關閉自動導向、搭配明確定義主網址是目前我覺得最穩定的做法。
如果之後又遇到相似問題,就照這篇的流程逐步排查即可。