permanentRedirect
permanentRedirect
関数を使用すると、ユーザーを別の URL に redirect することができます。permanentRedirect
は、 Server Components 、 Client Components 、Route ハンドラ、またはServer Actionsで使用することができます。
Streaming の context で使用された場合、これは client 側で redirect を発行するための meta タグを挿入します。server action で使用された場合、呼び出し元に対して 303 の HTTP redirect response を提供します。それ以外の場合、呼び出し元に対して 308(Permanent)の HTTP redirect response を提供します。
リソースが存在しない場合、代わりにnotFound
functionを使用することができます。
Good to know: 308( Permanent )の代わりに 307(Temporary)の HTTP redirect を返すことを好むなら、代わりに
redirect
関数を使用できます。
Parameters
permanentRedirect
関数は二つの引数を受け入れます:
permanentRedirect(path, type);
パラメータ | Type | Description |
---|---|---|
path | string | URL への redirect 。相対または絶対 path 可能です。 |
type | 'replace' ( default )または 'push' ( Server Actions での default ) | 実行する redirect の type 。 |
default では、permanentRedirect
は Server Actionsではpush
(ブラウザの履歴 stack に新しいエントリを追加)を使用し、それ以外の場合ではreplace
(ブラウザの履歴 stack 内の現在の URL を置き換える)を使用します。この動作はtype
パラメータを指定することで上書きすることができます。
type
パラメータは、Server Components で使用するときには効果がありません。
Returns
permanentRedirect
はどんな value も返しません。
Example
permanentRedirect()
関数を呼び出すと、NEXT_REDIRECT
error がスローされ、それがスローされた route セグメントのレンダリングが終了します。
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')
}
// ...
}
Good to know:
permanentRedirect
はreturn permanentRedirect()
を使用することを require していません。これは、 TypeScriptnever
type を使用しているためです。