重新導向(Redirects)
文件會隨時間演進,頁面與段落難免被搬移或改名。重新導向能讓書籤、搜尋結果與其他網站上的舊連結持續有效,把讀者從舊網址帶到新的位置。
基本設定
在 redirect_maps 裡,用舊的 Markdown 路徑 = 新的目的地來設定。不需要安裝任何東西;路徑與內部目的地都是相對於 docs_dir,目的地也可以是絕對的 HTTPS 網址:
使用預設的目錄式網址時,這會建立:
/old/→/new//old/#details→/new/#details(原有的錨點會保留)
左邊是過去的網址,右邊是現在的目的地。請依照變動的類型選擇來源:
- 頁面被改名、搬移、刪除 → 用頁面路徑
- 標題被改名,或段落被搬走 → 用頁面路徑加上錨點
- 一頁被拆成多頁 → 兩者搭配使用
重新導向整頁
頁面改名、搬移或移除時,把舊路徑對應到新頁面。因為來源路徑代表「頁面過去所在的位置」,所以舊位置不應該再有 Markdown 檔案:
重新導向段落
需要較新的 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" |
| 一頁拆成多頁 | 整頁後備 + 各段落錨點 |