雖然不是第一次做這件事了,不過還真的不常做。今天有朋友網域需要更換,剛好又是放我這管理,因為滿多人用外掛處理,但這個網站基於種種原因不太好用外掛,於是想乾脆改資料庫好了。 紀錄一下比較少處理的作法,某種程度上 wp 的外掛太方便惹,只要品管做的好,現在已經越來越少動程式。
* 友情提醒:該操作時是離峰時間,所以沒有在顧忌考慮什麼可能會壞掉的。
首先要先備份,主要是備份資料庫。如果資料過大的話要注意一下,我建議幾個方向:
- 優先把 sql 檔案備份下載。這次是使用這個方式處理。
- 如果檔案太大,複製一個新的資料庫。修改的話就只能用命令或網頁 phpMyAdmin / adminer 來處理。
接下來是幾個系統環境設定的部分:
- 確認網域 DNS 是否正確:設定 A 紀錄到指定伺服器 ip
- 確認 HTTP Service 設定是否正確,可以新舊網域指向同一個 root path 沒問題。
- 確認新網域的 SSL 是否正常設置。建議如果使用 cloudflare 的話要先確認好 SSL 的配置是否和舊網域相同,如果使用「彈性」的選項滿容易遇到問題的。
這時用新網域打開 wordpress,沒意外瀏覽器應該會跳轉至舊網域,正常展示。
再來修改線上的資料庫 wp_options.siteurl 和 wp_options.home 欄位1,先改成新的網域,確認 SSL 是否正常/網頁正常展示。 如果正常的話開啟瀏覽器開發人員模式會看到網頁正常開啟,不過圖片等網址都還是指向舊的網域2。
再來要來改資料庫了,因為我這次是把資料庫備份下來的,所以記得複製一份以後來編輯,以下用 old-domain.com 和 new-domain.com 來區分新舊網域。
首先要先注意 www 的子網域,以及是否有可恨的外掛/布景主題使用 PHP 序列化(參考)來做儲存的行為。如果遇到是序列化的欄位,請特別注意字元的數量。如果有要替換 www 的話,搜尋取代行為先替換比較好。
- 記得備份,開啟我們要編輯的 sql 檔案。
- 因為現在要改 SSL ,搜尋 http://(www)old-domain.com 替換成 https://(www)new-domain.com
- 搜尋 https://(www)old-domain.com 替換成 https://(www)new-domain.com
- 可能會有 email 或是單純網域的設定。搜尋 (www)old-domain.com 替換成 (www)new-domain.com
再次提醒如果有遇到類似長這種的,不是 JSON ,要注意序列化的操作,可以使用線上的序列化(參考)和反序列化(參考)工具。這次沒遇到,就不管啦。3

資料庫更新好以後覆蓋回去即可。如果會擔心的話,建議創一個新的資料庫匯入,從 wp-config.php 中修改資料庫路徑/名稱和帳號密碼。
打開來檢查一下確認網域有沒有舊網域以及有沒有什麼錯誤。
註解
- 呵呵看欄位名稱就知道網站多舊了。 ↩︎
- 這可能也是因為舊網站的關係。wp 很多設定可能有 CDN 或擴展的需求,資料庫紀錄絕對路徑,移站時,除了檔案路徑會有問題以外,常常網域的路徑也會需要注意。 ↩︎
- 我是覺得外掛/布景主題設計上,把網域包在序列化的開發者真的要判死刑 XD ↩︎
同場加映, 如果是很舊的網站,遇到 css 和 js 沒有設定 https 而導致錯誤,這邊提供一個解法。寫在 function.php 裡面。