permanentRedirect
permanentRedirect関数を使用すると、ユーザーを別のURLにリダイレクトできます。permanentRedirectはサーバーコンポーネント、クライアントコンポーネント、ルートハンドラー、およびサーバーアクションで使用できます。
ストリーミングコンテキストで使用された場合、クライアント側でリダイレクトを出力するためのメタタグが挿入されます。サーバーアクションで使用された場合、呼び出し元に303 HTTPリダイレクトレスポンスが返されます。それ以外の場合は、呼び出し元に308(永続的)HTTPリダイレクトレスポンスが返されます。
リソースが存在しない場合は、代わりにnotFound関数を使用できます。
補足:308(永続的)HTTPリダイレクトの代わりに307(一時的)HTTPリダイレクトを返したい場合は、代わりに
redirect関数を使用できます。
パラメータ
permanentRedirect関数は2つの引数を受け入れます:
permanentRedirect(path, type)| パラメータ | 型 | 説明 |
|---|---|---|
path | string | リダイレクト先のURL。相対パスまたは絶対パスを指定できます。 |
type | 'replace'(デフォルト)または'push'(サーバーアクションでのデフォルト) | 実行するリダイレクトの型。 |
デフォルトでは、permanentRedirectはサーバーアクションではpush(ブラウザ履歴スタックに新しいエントリを追加)を使用し、その他の場所ではreplace(ブラウザ履歴スタック内の現在のURLを置換)を使用します。typeパラメータを指定することで、この動作をオーバーライドできます。
typeパラメータはサーバーコンポーネントで使用された場合、効果がありません。
戻り値
permanentRedirectは値を返しません。
例
permanentRedirect()関数を呼び出すと、NEXT_REDIRECTエラーがスローされ、スローされたルートセグメントのレンダリングが終了します。
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 { id } = await params
const team = await fetchTeam(id)
if (!team) {
permanentRedirect('/login')
}
// ...
}補足:
permanentRedirectはTypeScriptのnever型を使用しているため、return permanentRedirect()の使用を必須としません。