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 していません。これは、 TypeScriptnevertype を使用しているためです。