permanentRedirect
La función permanentRedirect
permite redirigir al usuario a otra URL. permanentRedirect
puede usarse en Componentes del Servidor, Componentes del Cliente, Manejadores de Ruta (Route Handlers) y Acciones del Servidor (Server Actions).
Cuando se usa en un contexto de transmisión (streaming), inserta una metaetiqueta para emitir la redirección en el lado del cliente. Cuando se usa en una acción del servidor, devuelve una respuesta de redirección HTTP 303 al llamador. En otros casos, devuelve una respuesta de redirección HTTP 308 (Permanente) al llamador.
Si un recurso no existe, puede usar la función notFound
en su lugar.
A tener en cuenta: Si prefiere devolver una redirección HTTP 307 (Temporal) en lugar de 308 (Permanente), puede usar la función
redirect
en su lugar.
Parámetros
La función permanentRedirect
acepta dos argumentos:
permanentRedirect(path, type)
Parámetro | Tipo | Descripción |
---|---|---|
path | string | La URL a la que redirigir. Puede ser una ruta relativa o absoluta. |
type | 'replace' (predeterminado) o 'push' (predeterminado en Acciones del Servidor) | El tipo de redirección a realizar. |
Por defecto, permanentRedirect
usará push
(añade una nueva entrada al historial del navegador) en Acciones del Servidor (Server Actions) y replace
(reemplaza la URL actual en el historial del navegador) en otros casos. Puede sobrescribir este comportamiento especificando el parámetro type
.
El parámetro type
no tiene efecto cuando se usa en Componentes del Servidor.
Retorno
permanentRedirect
no devuelve ningún valor.
Ejemplo
Invocar la función permanentRedirect()
lanza un error NEXT_REDIRECT
y termina el renderizado del segmento de ruta en el que se lanzó.
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')
}
// ...
}
A tener en cuenta:
permanentRedirect
no requiere que usereturn permanentRedirect()
ya que utiliza el tiponever
de TypeScript.