permanentRedirect

Die permanentRedirect-Funktion ermöglicht es, Benutzer auf eine andere URL umzuleiten. permanentRedirect kann in Server-Komponenten (Server Components), Client-Komponenten (Client Components), Route Handlers und Server Actions verwendet werden.

Bei Verwendung in einem Streaming-Kontext wird ein Meta-Tag eingefügt, um die Umleitung clientseitig auszulösen. Bei Verwendung in einer Server-Aktion (Server Action) wird eine 303 HTTP-Weiterleitungsantwort an den Aufrufer gesendet. Andernfalls wird eine 308 (Permanent) HTTP-Weiterleitungsantwort an den Aufrufer gesendet.

Falls eine Ressource nicht existiert, können Sie stattdessen die notFound-Funktion verwenden.

Gut zu wissen: Wenn Sie eine 307 (Temporary) HTTP-Weiterleitung anstelle von 308 (Permanent) bevorzugen, können Sie die redirect-Funktion verwenden.

Parameter

Die permanentRedirect-Funktion akzeptiert zwei Argumente:

permanentRedirect(path, type)
ParameterTypBeschreibung
pathstringDie URL, zu der umgeleitet werden soll. Kann ein relativer oder absoluter Pfad sein.
type'replace' (Standard) oder 'push' (Standard in Server Actions)Der Typ der durchzuführenden Umleitung.

Standardmäßig verwendet permanentRedirect push (fügt einen neuen Eintrag zum Browser-Verlauf hinzu) in Server Actions und replace (ersetzt die aktuelle URL im Browser-Verlauf) in allen anderen Fällen. Sie können dieses Verhalten überschreiben, indem Sie den type-Parameter angeben.

Der type-Parameter hat keine Auswirkung, wenn er in Server-Komponenten verwendet wird.

Rückgabewert

permanentRedirect gibt keinen Wert zurück.

Beispiel

Der Aufruf der permanentRedirect()-Funktion wirft einen NEXT_REDIRECT-Fehler und beendet das Rendern des Routen-Segments, in dem er aufgetreten ist.

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')
  }

  // ...
}

Gut zu wissen: permanentRedirect erfordert nicht die Verwendung von return permanentRedirect(), da es den TypeScript-never-Typ verwendet.