跳轉至

重新導向(Redirects)

文件會隨時間演進,頁面與段落難免被搬移或改名。重新導向能讓書籤、搜尋結果與其他網站上的舊連結持續有效,把讀者從舊網址帶到新的位置。

基本設定

redirect_maps 裡,用舊的 Markdown 路徑 = 新的目的地來設定。不需要安裝任何東西;路徑與內部目的地都是相對於 docs_dir,目的地也可以是絕對的 HTTPS 網址:

[project.plugins.redirects.redirect_maps]
"old.md" = "new.md"

使用預設的目錄式網址時,這會建立:

  • /old//new/
  • /old/#details/new/#details(原有的錨點會保留)

左邊是過去的網址,右邊是現在的目的地。請依照變動的類型選擇來源:

  • 頁面被改名、搬移、刪除 → 用頁面路徑
  • 標題被改名,或段落被搬走 → 用頁面路徑加上錨點
  • 一頁被拆成多頁 → 兩者搭配使用

重新導向整頁

頁面改名、搬移或移除時,把舊路徑對應到新頁面。因為來源路徑代表「頁面過去所在的位置」,所以舊位置不應該再有 Markdown 檔案

[project.plugins.redirects.redirect_maps]
"getting-started.md" = "zensical_basics.md"

重新導向段落

需要較新的 Zensical 版本

重新導向仍然存在的頁面裡的錨點(例如下面的 "current.md#old-heading"),在 Zensical 0.0.59 建置時會出錯:redirect output '...' collides with a page。本教學用 0.0.63 實測可以正常建置。如果遇到這個錯誤,請先依 基本操作指令裡的「升級 Zensical」升級。整頁重新導向(來源頁面已被移除)在兩個版本都可以使用。

標題改名時,把舊錨點對應到新錨點;同樣的寫法也可以把段落搬到另一頁:

[project.plugins.redirects.redirect_maps]
"current.md#old-heading" = "current.md#new-heading"
"guide.md#configuration" = "reference/configuration.md"

會建立:

  • /current/#old-heading/current/#new-heading
  • /guide/#configuration/reference/configuration/

拆分頁面

一頁拆成多頁時,先建立整頁重新導向當作後備方案,再替有更明確目的地的段落加上錨點重新導向:

[project.plugins.redirects.redirect_maps]
"old.md" = "overview.md"
"old.md#installation" = "guides/install.md#linux"
"old.md#configuration" = "guides/configuration.md"
"old.md#api" = "reference/api.md"

會建立:

舊網址 導向
/old/ /overview/
/old/#installation /guides/install/#linux
/old/#configuration /guides/configuration/
/old/#api /reference/api/
/old/#unknown /overview/#unknown(沒有對應的錨點就走後備方案)

用 Zensical Studio 自動維護

搭配 Zensical Studio,當已發佈的頁面被搬移或錨點改變時,Studio 可以自動更新 redirect_maps。錨點改名並存檔後,標題上方會出現 Add anchor redirect 的 CodeLens,點一下就會替舊網址加上錨點重新導向。前提是已經設定好 redirects 外掛與 redirect_maps

總結

情況 設定
頁面改名/搬移 "舊.md" = "新.md"
標題改名 "頁.md#舊" = "頁.md#新"
段落搬到別頁 "頁.md#段落" = "別頁.md"
一頁拆成多頁 整頁後備 + 各段落錨點

參考資料