跳到主要內容
前端開發

Nuxt 3 / 4 的 routeRules:重新導向與頁面設定

整理 Nuxt 3 與 Nuxt 4 的 routeRules 用法,可以依照不同網址設定重新導向、預渲染、SSR 與快取,並簡單對照 Nuxt 2 的舊做法。

W

Nuxt 2 時期如果要處理重新導向,常會去修改 router。 到了 Nuxt 3,開始可以使用 routeRules;Nuxt 4 也延續相同的做法。 可以先把它理解成:

告訴 Nuxt「某個網址要怎麼處理」。

例如:

/old-page
→ 重新導向

/blog/**
→ 預先產生 HTML

/admin/**
→ 不做 SSR

/api/**
→ 加上快取

這些都可以集中寫在 nuxt.config.ts。

重新導向

最基本的例子:

export default defineNuxtConfig({
  routeRules: {
    '/old-page': {
      redirect: '/new-page'
    }
  }
})

使用者進入:

/old-page

就會被帶到:

/new-page

例如首頁進入後直接導向登入頁:

export default defineNuxtConfig({
  routeRules: {
    '/': {
      redirect: '/login'
    }
  }
})

永久搬家的網址

如果舊網址確定不會再使用,可以明確設定 301:

export default defineNuxtConfig({
  routeRules: {
    '/old-page': {
      redirect: {
        to: '/new-page',
        statusCode: 301
      }
    }
  }
})

這種比較適合:

舊文章網址
→ 新文章網址

舊分類
→ 新分類

尤其網站已經被搜尋引擎收錄時,應該明確處理重新導向。

一次設定整個路徑

routeRules 也可以使用萬用路徑:

export default defineNuxtConfig({
  routeRules: {
    '/old/**': {
      redirect: '/new/**'
    }
  }
})

例如:

/old/about
/old/posts/123
/old/category/frontend

都可以套用同一組規則。

** 可以簡單理解成:

這個路徑底下的所有內容。

routeRules 不只是重新導向

routeRules 還可以設定不同頁面的渲染方式。

例如:

export default defineNuxtConfig({
  routeRules: {
    '/': {
      prerender: true
    },

    '/blog/**': {
      prerender: true
    },

    '/admin/**': {
      ssr: false
    },

    '/api/data': {
      cache: {
        maxAge: 60 * 10
      }
    },

    '/old-page': {
      redirect: '/new-page'
    }
  }
})

可以白話理解成:

/
→ 建置時先產生 HTML

/blog/**
→ 部落格文章也先產生 HTML

/admin/**
→ 只在瀏覽器執行,不做 SSR

/api/data
→ 快取 10 分鐘

/old-page
→ 導到 /new-page

所以 routeRules 不只是 redirect。

它比較像是:

每個網址的處理規則表。

prerender 與 ssr 是什麼?

prerender

'/about': {
  prerender: true
}

代表:

build 的時候就先把這個頁面的 HTML 做好。

比較適合:

首頁
關於我
文章
說明頁面

這些內容不需要每次有人進來都重新產生。

ssr: false

'/admin/**': {
  ssr: false
}

代表:

這些頁面不要在伺服器產生 HTML,交給瀏覽器執行。

例如:

後台
管理系統
不需要 SEO 的工具頁

可以視需求使用。

Nuxt 2、3、4 差在哪?

Nuxt 2Nuxt 3Nuxt 4
重新導向修改 router / middleware 等方式routeRulesrouteRules
預渲染設定generate 等設定routeRulesrouteRules
單一路徑關閉 SSR沒有現在這種統一寫法routeRulesrouteRules
路由快取需另外處理routeRulesrouteRules

所以如果是從 Nuxt 3 升到 Nuxt 4:

routeRules 基本上不用重新學。

真正變比較大的反而是 Nuxt 4 的:

app/
shared/
目錄結構

routeRules 本身則是延續 Nuxt 3 的概念。

小結

Nuxt 3 與 Nuxt 4 都可以在:

nuxt.config.ts

使用:

routeRules: {
  '/某個網址': {
    // 這個網址要套用的規則
  }
}

最常見的幾個用途:

// 重新導向
redirect: '/new-page'

// 預先產生 HTML
prerender: true

// 關閉 SSR
ssr: false

// 快取
cache: {
  maxAge: 600
}

所以可以直接把 routeRules 記成:

依照網址,告訴 Nuxt 這個頁面要怎麼處理。

參考資料

分享這篇