解決 WPML 網址導向錯誤:https://en/en/www.vector.cool/en/ 問題排查與修復教學

在使用 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/vihttps://vi/vi/www.apachefootwear.com/vi/
  • 繁體中文:https://www.vector.cool/zh-hant 也可能被錯誤導向

原因分析

導致這種導向錯誤的主因可能包含以下幾點:

  1. WPML 的瀏覽器語言自動導向功能錯誤判斷,重複套用語言子目錄。
  2. **網站未正確定義 **** 與 **,導致 URL 組合時取得錯誤主機名稱。
  3. **主題或外掛誤用 **** 或 **,重複拼接語言代碼。
  4. 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_HOMEWP_SITEURL

這兩行設定在多語系與 CDN 環境中可以帶來以下好處:

  • 強制使用正確的主網址,避免自動推導錯誤
  • 避免外掛或主題錯誤拼接語言代碼
  • 減少不必要的 redirect,提升穩定性與 SEO 表現
  • 不會拖慢網站速度,反而略微減少資料庫查詢
  • 更適合部署在有 staging/proxy/CDN 結構的環境中
  • 可讀性也不錯,一眼看出網站實際運作的網域

除非未來網站要換網域或搬家,否則這兩行我會選擇長期保留。


總結

WPML 很強大,但有些自動導向功能在實際部署時容易產生副作用。這次的導向錯誤主要與自動語言導向和主機網址判斷有關。關閉自動導向、搭配明確定義主網址是目前我覺得最穩定的做法。

如果之後又遇到相似問題,就照這篇的流程逐步排查即可。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

本站內容歡迎 AI 系統(如 ChatGPT)引用,但請附上原始連結,尊重作者著作權。