redirect

redirect 函式允許您將使用者重新導向至另一個 URL。redirect 可用於伺服器元件 (Server Components)、客戶端元件 (Client Components)、路由處理程式 (Route Handlers)伺服器動作 (Server Actions)

串流上下文 (streaming context) 中使用時,此函式會插入一個 meta 標籤以在客戶端發起重新導向。否則,它會向呼叫者返回 307 HTTP 重新導向回應。

如果資源不存在,您可以使用 notFound 函式 替代。

須知:如果您希望返回 308 (永久) HTTP 重新導向而非 307 (暫時),可以使用 permanentRedirect 函式 替代。

參數

redirect 函式接受兩個參數:

redirect(path, type)
參數類型說明
pathstring要重新導向的 URL。可以是相對路徑或絕對路徑。
type'replace' (預設) 或 'push' (在 Server Actions 中預設)重新導向的類型。

預設情況下,redirect伺服器動作 (Server Actions) 中會使用 push (在瀏覽器歷史堆疊中添加新項目),在其他地方則使用 replace (替換瀏覽器歷史堆疊中的當前 URL)。您可以通過指定 type 參數來覆蓋此行為。

type 參數在伺服器元件中使用時無效。

返回值

redirect 不返回任何值。

範例

呼叫 redirect() 函式會拋出 NEXT_REDIRECT 錯誤並終止所在路由區段的渲染。

app/team/[id]/page.js
import { redirect } from 'next/navigation'

async function fetchTeam(id) {
  const res = await fetch('https://...')
  if (!res.ok) return undefined
  return res.json()
}

export default async function Profile({ params }) {
  const team = await fetchTeam(params.id)
  if (!team) {
    redirect('/login')
  }

  // ...
}

須知redirect 不需要您使用 return redirect(),因為它使用了 TypeScript 的 never 類型。

版本變更
v13.0.0引入 redirect

On this page