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
エラーがスローされ、スローされたルートセグメントのレンダリングが終了します。
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()
を使用する必要はありません。
お役に立ちましたか?