コンテンツへスキップ

permanentRedirect

permanentRedirect 関数を使用すると、ユーザーを別の URL にリダイレクトできます。permanentRedirect は、サーバーコンポーネント、クライアントコンポーネント、ルートハンドラー、および サーバーアクション で使用できます。

ストリーミングコンテキストで使用すると、クライアント側でリダイレクトを発行するためのメタタグが挿入されます。サーバーアクションで使用すると、呼び出し元に 303 HTTP リダイレクトレスポンスを提供します。それ以外の場合は、呼び出し元に 308 (Permanent) HTTP リダイレクトレスポンスを提供します。

リソースが存在しない場合は、代わりに notFound 関数を使用できます。

知っておくと良いこと: 308 (Permanent) HTTP リダイレクトではなく 307 (Temporary) HTTP リダイレクトを返す場合は、代わりに redirect 関数を使用できます。

パラメータ

permanentRedirect 関数は 2 つの引数を受け取ります

permanentRedirect(path, type)
パラメータ説明
path文字列リダイレクト先の URL。相対パスまたは絶対パスを指定できます。
type'replace' (デフォルト) または 'push' (サーバーアクションでのデフォルト)実行するリダイレクトのタイプ。

デフォルトでは、permanentRedirectサーバーアクションでは push (ブラウザの履歴スタックに新しいエントリを追加) を使用し、それ以外の場合は replace (ブラウザの履歴スタックで現在の URL を置換) を使用します。type パラメータを指定することで、この動作をオーバーライドできます。

type パラメータは、サーバーコンポーネントで使用する場合は効果がありません。

戻り値

permanentRedirect は値を返しません。

permanentRedirect() 関数を呼び出すと、NEXT_REDIRECT エラーがスローされ、スローされたルートセグメントのレンダリングが終了します。

app/team/[id]/page.js
import { permanentRedirect } 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) {
    permanentRedirect('/login')
  }
 
  // ...
}

知っておくと良いこと: permanentRedirect は、TypeScript の never 型を使用しているため、return permanentRedirect() を使用する必要はありません。