如何使用 Astro 404 頁面重定向正確的文章頁面?

如何使用 Astro 404 頁面重定向正確的文章頁面?
作者: Calpa Liu
字數:1155
出版日期:November 30, 2023
更新日期:December 7, 2023
分類: #前端開發

在博客的反向連結(backlink)檢查過程中,發現許多網站引用我的技術文章。然而,由於年代久遠,這些網站使用的連結往往導向 404 頁面,所以我就在 Astro 的 404 頁面寫一段代碼解決這個問題。

例如【【翻譯】前端性能優化必備工具清單】,這是我在 2017 年翻譯的文章: https://calpa.me/2017/06/19/front-end-performance-check-list-for-production-in-chinese/ 應該重導向到 https://calpa.me/blog/front-end-performance-check-list-for-production-in-chinese/

利用 Astro SSR 優化性能和用戶體驗

使用 Astro SSR 時,我們可以將一些關鍵邏輯移到伺服器端執行,從而提高網站的性能並減少用戶等待時間。這特別有助於處理需要根據路徑查找或處理內容的情況,如解決 404 錯誤問題。這有助於提供更流暢的用戶體驗,確保網站能夠快速響應用戶的需求。

解決方案:根據當前網址的路徑來查找相關的內容條目

以下代碼的主要功能是根據當前網址的路徑,查找相對應的博客內容條目(文章)。如果找到相符的文章,則會將用戶重定向到該文章頁面。如果找不到相符的文章,則會顯示一個友好的 404 錯誤頁面,以改善用戶體驗。

以下是代碼片段的示例:

import { getEntry } from "astro:content";

const pathname = Astro.url.pathname;

const array = pathname.split("/").filter((x) => x);

const maybe_slug = array[array.length - 1];

const post = await getEntry({
  collection: "blog",
  slug: maybe_slug,
});

// 如果找到相應的內容條目,則將用戶重定向到正確的文章頁面。
if (post !== undefined) {
  return Astro.redirect(`/blog/${maybe_slug}`);
}

首先,獲取當前網址的路徑,然後解析該路徑以獲得可能的文章 slug。接下來,使用 getEntry 函數來查找博客集合中的相應內容條目。如果找到該條目,則會重定向到正確的文章頁面。如果未找到條目,則會顯示 404 錯誤頁面。

感謝您閱讀我的文章。歡迎隨時分享你的想法。
關於 Calpa

Calpa 擅長使用 TypeScript、React.js 和 Vue.js 開發Responsive Web Design網站。

此外,Calpa 積極參與香港和台灣的開源社區,曾在2019年的香港開源大會上擔任講者,提供工作經驗和見解。此外,他也在 GitHub 上公開分享個人博客程式碼,已獲得超過300顆星星和60個分支的支持。

更多前端開發技術文章:傳送門