permanentRedirect

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

ストリーミングコンテキストで使用すると、クライアントサイドでリダイレクトを発行するためのmetaタグが挿入されます。それ以外の場合は、呼び出し元に308(恒久的)HTTPリダイレクトレスポンスを返します。

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

補足: 308(恒久的)ではなく307(一時的)HTTPリダイレクトを返したい場合は、redirect関数を代わりに使用できます。

パラメータ

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

permanentRedirect(path, type)
パラメータタイプ説明
pathstringリダイレクト先の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()を使用する必要はありません。