Weiterleitung (redirect)
Die redirect
-Funktion ermöglicht es, den Benutzer zu einer anderen URL weiterzuleiten. redirect
kann in Server-Komponenten, Route-Handlern und Server-Aktionen verwendet werden.
Bei Verwendung in einem Streaming-Kontext wird ein Meta-Tag eingefügt, um die Weiterleitung clientseitig auszulösen. Bei Verwendung in einer Server-Aktion wird eine 303 HTTP-Weiterleitungsantwort an den Aufrufer gesendet. Andernfalls wird eine 307 HTTP-Weiterleitungsantwort an den Aufrufer gesendet.
Falls eine Ressource nicht existiert, kann stattdessen die notFound
-Funktion verwendet werden.
Wissenswert:
- In Server-Aktionen und Route-Handlern sollte
redirect
nach demtry/catch
-Block aufgerufen werden.- Wenn Sie eine 308 (Permanente) HTTP-Weiterleitung anstelle von 307 (Temporär) bevorzugen, können Sie stattdessen die
permanentRedirect
-Funktion verwenden.
Parameter
Die redirect
-Funktion akzeptiert zwei Argumente:
Parameter | Typ | Beschreibung |
---|---|---|
path | string | Die URL, zu der weitergeleitet werden soll. Kann ein relativer oder absoluter Pfad sein. |
type | 'replace' (Standard) oder 'push' (Standard in Server-Aktionen) | Der Typ der Weiterleitung. |
Standardmäßig verwendet redirect
push
(fügt einen neuen Eintrag zum Browser-Verlauf hinzu) in Server-Aktionen und replace
(ersetzt die aktuelle URL im Browser-Verlauf) in allen anderen Fällen. Dieses Verhalten kann durch Angabe des type
-Parameters überschrieben werden.
Der type
-Parameter hat keine Auswirkung, wenn er in Server-Komponenten verwendet wird.
Rückgabewert
redirect
gibt keinen Wert zurück.
Beispiel
Server-Komponente
Der Aufruf der redirect()
-Funktion wirft einen NEXT_REDIRECT
-Fehler und beendet das Rendern des Routen-Segments, in dem er ausgelöst wurde.
Wissenswert:
redirect
erfordert nicht die Verwendung vonreturn redirect()
, da es den TypeScript-Typnever
verwendet.
Client-Komponente
redirect
kann direkt in einer Client-Komponente verwendet werden.
Wissenswert: Bei Verwendung von
redirect
in einer Client-Komponente während des initialen Seitenladevorgangs im Server-Side Rendering (SSR) wird eine serverseitige Weiterleitung durchgeführt.
redirect
kann in einer Client-Komponente über eine Server-Aktion verwendet werden. Wenn Sie einen Event-Handler benötigen, um den Benutzer weiterzuleiten, können Sie den useRouter
-Hook verwenden.
FAQ
Warum verwendet redirect
307 und 308?
Bei Verwendung von redirect()
fällt auf, dass die Statuscodes 307
für eine temporäre Weiterleitung und 308
für eine permanente Weiterleitung verwendet werden. Traditionell wurde 302
für eine temporäre Weiterleitung und 301
für eine permanente Weiterleitung verwendet, jedoch haben viele Browser die Anfragemethode der Weiterleitung von POST
zu GET
geändert, wenn ein 302
verwendet wurde, unabhängig von der ursprünglichen Anfragemethode.
Nehmen wir das folgende Beispiel einer Weiterleitung von /users
zu /people
: Wenn Sie eine POST
-Anfrage an /users
senden, um einen neuen Benutzer zu erstellen, und eine 302
-temporäre Weiterleitung erfolgt, wird die Anfragemethode von POST
zu GET
geändert. Das ergibt keinen Sinn, da zum Erstellen eines neuen Benutzers eine POST
-Anfrage an /people
gesendet werden sollte und nicht eine GET
-Anfrage.
Die Einführung des 307
-Statuscodes bedeutet, dass die Anfragemethode als POST
beibehalten wird.
302
- Temporäre Weiterleitung, ändert die Anfragemethode vonPOST
zuGET
307
- Temporäre Weiterleitung, behält die Anfragemethode alsPOST
bei
Die redirect()
-Methode verwendet standardmäßig 307
anstelle von 302
für temporäre Weiterleitungen, was bedeutet, dass Ihre Anfragen immer als POST
-Anfragen beibehalten werden.
Erfahren Sie mehr über HTTP-Weiterleitungen.
Versionsverlauf
Version | Änderungen |
---|---|
v13.0.0 | redirect eingeführt. |