WordPress | 架在 IIS 的踩雷紀錄 | Give Me Pretty Permalinks!
前言
最近公司的工作上收到一個需求,希望把目前放在 S3 上的 WordPress 站台搬回來,並且改用 Windows Server 來 host。雖然不是第一次碰 WordPress,但是距離上一次看到他也應該也是 7、8 年以上了😅 加上我對站台建置相關的經驗很少,所以每個操作環節都還蠻小心的,很怕一個改動機器就爆了XD
之前有用過 XAMPP 等套裝軟體,一次就可以 ready 好所有環境。不過因為彈性上的考量,所以就手動從零開始建置相關的環境。雖然過程中有遇到一些小問題,不過大約不到半天的時間就可以找到相關資源解決了。步驟大概是這樣-
- 啟用 IIS FastCGI 來 host php 應用程式
- 下載最新版的 php
- 修改 php.ini 設定檔
- 在 IIS 上新增 php 的應用程式集區
- 安裝 MySQL 與設定帳號
- 下載最新版的 WordPress
- 在
wp-config.php
新增 DB 相關設定 - 在 IIS 上設定 WordPress 站台,新增 web.config
- 使用 UpdraftPlus 還原備份的 WordPress 跟 DB
- 從 DB 修正相關的路徑連結
問題
還原完成後,原本覺得弄得差不多了,但是發現幾乎所有文章和選單點進去後,都會出現內部 404 的頁面。奇怪的是如果永久連結為預設,就能連到正確的頁面。不過因為 SEO 的關係,連結格式需要是文章名稱組成。所以大概花了一個禮拜的時間找有關 permalinks(永久連結) 的相關文章。
雖然已經照大部分的文章提供的解法實作,不過還是沒辦法解決。情急之下,差一點就要開啟另外一個坑踏入nginx。就在差點放棄時,剛好看到一篇 stackoverflow 的文章,終於解決這個難題。
不過這篇文章如果只是單純下「pretty permalinks」、「IIS」、「not found」等關鍵字,其實很難找到。也因此在這裡記錄下來,分享給有需要的人。
解決
安裝 URL Rewrite Module
Windows Server 預設沒有這個模組,必須從官網或是透過 Web Platform Installer 來下載安裝。有了 URL Rewrite Module,才可以在 web.config
加入相關的 rewrite 設定
後台設定永久連結
在管理後台頁,點選「設定」,然後再點選「永久連結」,就可以選擇偏好的連結格式。確定後點選「儲存設定」。
檢查 web.config
通常設定完永久連結後,wordpress 會自動更新 web.config
,將rewrite 設定加進去。相關程式應該會長這樣-
1 | <rewrite> |
擴充 wp-config.php
這裡是重點!! 因為其實前面幾個步驟還蠻快就可以完成。不過這個步驟是參考到這篇文章才能知道怎麼做。原文標題是Arabic url is not working in WordPress on Windows IIS Server。完全沒提到 permalink,所以這篇在搜尋結果上被埋在超級隱密的XD
最主要的問題原因是,IIS的 URL Rewrite 並沒有辦法認識多國語言的連結。所以需要在wp-config.php
的最後面加上一段-
1 | if ( isset($_SERVER['UNENCODED_URL']) ) { |
小結
從這個經驗來看,我學到了幾件事-
- 在搜尋引擎上找問題,試著先想出所有可能的關鍵字,然後用不同的排列組合下去找。
- 在搜尋結果頁面,像是 stackoverflow 這種網站,通常一個搜尋結果底下還有相關的文章連結,請不要放過他們,一個一個點進去看。
- 尋找問題要有耐心。如果開始覺得不耐煩了,就先全部關掉,明天再來。
參考資源
WordPress | 架在 IIS 的踩雷紀錄 | Give Me Pretty Permalinks!