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ámetroTipoDescripción
pathstringLa 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ó.

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 team = await fetchTeam(params.id)
  if (!team) {
    permanentRedirect('/login')
  }

  // ...
}

A tener en cuenta: permanentRedirect no requiere que use return permanentRedirect() ya que utiliza el tipo never de TypeScript.