permanentRedirect

La función permanentRedirect permite redirigir al usuario a otra URL. Se puede utilizar en Componentes de Servidor, Componentes de Cliente, Manejadores de Ruta y Acciones de Servidor.

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 de 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, puedes usar la función notFound en su lugar.

Nota importante: Si prefieres devolver una redirección HTTP 307 (Temporal) en lugar de 308 (Permanente), puedes usar la función redirect.

Parámetros

La función permanentRedirect acepta dos argumentos:

permanentRedirect(path, type)
ParámetroTipoDescripción
pathstringURL a la que redirigir. Puede ser una ruta relativa o absoluta.
type'replace' (predeterminado) o 'push' (predeterminado en Acciones de Servidor)Tipo de redirección a realizar.

Por defecto, permanentRedirect usará push (añade una nueva entrada al historial del navegador) en Acciones de Servidor y replace (reemplaza la URL actual en el historial del navegador) en otros casos. Puedes sobrescribir este comportamiento especificando el parámetro type.

El parámetro type no tiene efecto cuando se usa en Componentes de Servidor.

Valor de 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 donde se lanzó.

app/team/[id]/page.js
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')
  }

  // ...
}

Nota importante: permanentRedirect no requiere que uses return permanentRedirect() ya que utiliza el tipo never de TypeScript.

On this page