遷移到新網域

本頁內容

Settings > General 中的 Site URL 是站台的公開位址。電子郵件和外掛中的連結、站台地圖、robots.txt、hreflang 連結、社群圖片 URL,以及 SEO 面板中設定的正規連結(canonical link)都會使用它。請透過 Change domain 對話方塊來修改,該對話方塊會在切換之前檢查新網域是否能提供該站台。

只有管理員可以變更網域。

開始之前

請先將新網域指向站台。EmDash 在切換時會檢查該網域,因此該網域必須已經透過 https:// 提供該站台。

  • Cloudflare Workers: 在 Cloudflare 控制台的 Workers & Pages 中開啟你的 Worker,進入 Domains 分頁並新增該網域。Wrangler 設定請參閱自訂網域。
  • Node.js 及其他主機: 為該網域建立 DNS 記錄和憑證,並將其路由到提供目前位址的同一台伺服器。

在瀏覽器中開啟 https://<新網域>/_emdash/admin。如果看到 EmDash 登入頁面,表示網域已就緒。

如果站台設定了 siteUrl、EMDASH_SITE_URL 或 SITE_URL,電子郵件和外掛中的連結將使用該位址而不是 Site URL,Settings > General 中也會註明這一點。請修改設定並重新部署,以便同時遷移這些連結。

變更網域

  1. 開啟 Settings > General,選擇 Site URL 旁邊的 Change domain。

  2. 輸入新網域,例如 www.example.com。也可以輸入完整的來源(origin),例如 https://www.example.com。不接受路徑和連接埠。

  3. 選擇 Check and switch。

    EmDash 會向 https://www.example.com/_emdash/api/site/domain-proof 要求一次性驗證碼。驗證碼相符後,它會將 https://www.example.com 儲存為 Site URL 並關閉對話方塊。

Settings > General 中尚未儲存的變更在切換後仍保留在表單中。請像往常一樣儲存它們。

新位址何時生效

  • 電子郵件: 登入、邀請、自助註冊、帳號復原和留言通知郵件會立即連結到新位址。
  • 外掛: ctx.site.url 會在伺服器重新啟動後變更;在 Cloudflare Workers 上,則會在新的 isolate 啟動後變更。
  • 站台地圖和 robots.txt: 瀏覽器和共用快取最多可能保留舊版本一小時(站台地圖)或一天(robots.txt)。

在你從主機上移除舊位址之前,它會繼續提供該站台。若要將訪客從舊位址導向新位址,請在主機或 DNS 供應商處新增重新導向。

遷移後登入

通行密鑰只能在建立它的位址上使用。遷移後,在舊位址建立的通行密鑰無法在新位址使用。請在仍登入舊位址時,把你自己的登入遷移到新位址:

  1. 在 Settings > General 中,選擇 Site URL 下方的 **Continue on www.example.com**。當你登入的位址不是 Site URL 時,會出現該按鈕。如果已設定 siteUrl,則改為與該位址比較。

  2. 在新位址開啟的登入頁面上選擇 Continue。該連結只能使用一次,並在 5 分鐘後失效。

  3. Settings > Security 會開啟並顯示通行密鑰表單。選擇 Register Passkey,為新位址建立通行密鑰。

此操作無需電子郵件即可完成。當電子郵件已設定時,其他使用者可以透過魔法連結在新位址登入,然後在那裡新增通行密鑰。在此之前,只要舊位址仍提供該站台,他們就繼續在舊位址登入。

通知其他使用者

當電子郵件已設定,且使用者使用通行密鑰登入時,管理員可以告知其他所有使用者現在應在哪裡登入:

  1. 在 Settings > General 中,選擇 Site URL 下方的 Email users。

  2. 選擇 Send emails。

每位帳號未被停用的使用者(你本人除外)都會收到一封郵件,告知站台已遷移到已設定的 siteUrl(未設定時為 Site URL),並附帶指向該位址登入頁面的按鈕。該郵件不會讓任何人自動登入。郵件會說明舊位址的通行密鑰在新位址上無法使用,使用者需要先透過郵件連結登入。隨後會顯示一則訊息,說明已寄出多少封郵件,以及郵件服務供應商拒收了多少封。每個站台每小時最多可寄送 3 次這類郵件。

如果檢查失敗

對話方塊會顯示檢查失敗的原因:

  • www.example.com does not resolve to a public address: 該網域還沒有公開的 DNS 記錄,或指向了私有網路。請完成 DNS 設定後重試。
  • Could not reach https://www.example.com: 請求逾時或連線失敗,例如憑證尚未就緒。請等待幾分鐘後重試。
  • https://example.com redirects to https://www.example.com. Enter that address instead.: 該網域發生了重新導向。請輸入它重新導向到的位址。
  • https://www.example.com does not serve this site yet: 該網域有回應,但回應的不是本站台。它可能仍指向先前的主機,或者前面有 Cloudflare Access 之類的登入頁面。在 Cloudflare 上,請在 Worker 的 Domains 分頁中將該網域新增為 Custom Domain。路由(route)對該檢查無效:Cloudflare 不會為 Worker 向同一區域內自身路由發送的請求執行 Worker。

不經檢查直接使用位址

檢查失敗時,對話方塊會提供 Use … anyway。它會不經檢查直接儲存該位址。當站台無法從網際網路存取時使用它,例如在 http://localhost:4321 進行本機開發,或使用位於登入頁面之後的預備網域。

站台地圖和搜尋中繼資料會按輸入的原樣使用所儲存的位址,包括 https://example.com/blog 這樣的路徑。電子郵件和外掛只使用其來源(origin),並且僅在它使用 https://,或主機為 localhost、127.0.0.1 或 [::1] 時才會使用。否則,它們會繼續使用站台最初設定時所用的位址。

選擇之前請仔細檢查該位址。沒有任何機制確認它能存取到該站台。