Weiterleitung
Es gibt mehrere Möglichkeiten, Weiterleitungen in Next.js zu handhaben. Diese Seite geht auf jede verfügbare Option, Anwendungsfälle und die Verwaltung einer großen Anzahl von Weiterleitungen ein.
API | Zweck | Wo | Statuscode |
---|---|---|---|
redirect | Benutzer nach einer Mutation oder einem Ereignis weiterleiten | Server-Komponenten, Server-Actions, Route-Handler | 307 (Temporär) oder 303 (Server-Action) |
permanentRedirect | Benutzer nach einer Mutation oder einem Ereignis weiterleiten | Server-Komponenten, Server-Actions, Route-Handler | 308 (Permanent) |
useRouter | Client-seitige Navigation durchführen | Ereignis-Handler in Client-Komponenten | Nicht zutreffend |
redirects in next.config.js | Eingehende Anfrage basierend auf einem Pfad weiterleiten | next.config.js -Datei | 307 (Temporär) oder 308 (Permanent) |
NextResponse.redirect | Eingehende Anfrage basierend auf einer Bedingung weiterleiten | Middleware | Beliebig |
redirect
-Funktion
Die redirect
-Funktion ermöglicht es, Benutzer zu einer anderen URL weiterzuleiten. Sie können redirect
in Server-Komponenten, Route-Handlern und Server-Actions aufrufen.
redirect
wird häufig nach einer Mutation oder einem Ereignis verwendet. Zum Beispiel beim Erstellen eines Beitrags:
Hinweis:
redirect
gibt standardmäßig einen 307-Statuscode (Temporäre Weiterleitung) zurück. Bei Verwendung in einer Server-Action wird ein 303-Statuscode (Andere) zurückgegeben, der häufig zur Weiterleitung zu einer Erfolgsseite nach einer POST-Anfrage verwendet wird.redirect
wirft intern einen Fehler, daher sollte es außerhalb vontry/catch
-Blöcken aufgerufen werden.redirect
kann in Client-Komponenten während des Rendering-Prozesses aufgerufen werden, jedoch nicht in Ereignis-Handlern. Verwenden Sie stattdessen denuseRouter
-Hook.redirect
akzeptiert auch absolute URLs und kann zur Weiterleitung zu externen Links verwendet werden.- Wenn Sie vor dem Rendering weiterleiten möchten, verwenden Sie
next.config.js
oder Middleware.
Weitere Informationen finden Sie in der redirect
-API-Referenz.
permanentRedirect
-Funktion
Die permanentRedirect
-Funktion ermöglicht es Ihnen, Benutzer zu einer anderen URL dauerhaft weiterzuleiten. Sie können permanentRedirect
in Server-Komponenten, Route-Handlern und Server-Actions aufrufen.
permanentRedirect
wird häufig nach einer Mutation oder einem Ereignis verwendet, das die kanonische URL einer Entität ändert, z.B. beim Aktualisieren der Profil-URL eines Benutzers nach einer Änderung des Benutzernamens:
Hinweis:
permanentRedirect
gibt standardmäßig einen 308-Statuscode (permanente Weiterleitung) zurück.permanentRedirect
akzeptiert auch absolute URLs und kann zur Weiterleitung zu externen Links verwendet werden.- Wenn Sie vor dem Rendering weiterleiten möchten, verwenden Sie
next.config.js
oder Middleware.
Weitere Informationen finden Sie in der permanentRedirect
-API-Referenz.
useRouter()
-Hook
Wenn Sie in einer Client-Komponente in einem Ereignis-Handler eine Weiterleitung benötigen, können Sie die push
-Methode des useRouter
-Hooks verwenden. Beispiel:
Hinweis:
- Wenn du Benutzer nicht programmgesteuert navigieren musst, solltest du die
<Link>
-Komponente verwenden.
Weitere Informationen findest du in der useRouter
API-Referenz.
redirects
in next.config.js
Die Option redirects
in der Datei next.config.js
erlaubt es, eine eingehende Anfragepfad zu einem anderen Ziel-Pfad umzuleiten. Dies ist nützlich, wenn du die URL-Struktur von Seiten änderst oder eine Liste von Weiterleitungen hast, die im Voraus bekannt sind.
redirects
unterstützt Pfad, Header-, Cookie- und Abfrage-Matching und bietet dir die Flexibilität, Benutzer basierend auf einer eingehenden Anfrage weiterzuleiten.
Um redirects
zu verwenden, füge die Option zu deiner next.config.js
-Datei hinzu:
Weitere Informationen findest du in der redirects
API-Referenz.
Hinweis:
redirects
kann einen 307 (Temporäre Weiterleitung) oder 308 (Permanente Weiterleitung) Statuscode mit der Optionpermanent
zurückgeben.redirects
kann auf Plattformen ein Limit haben. Zum Beispiel gibt es bei Vercel ein Limit von 1.024 Weiterleitungen. Um eine große Anzahl von Weiterleitungen (1000+) zu verwalten, solltest du eine benutzerdefinierte Lösung mit Middleware in Betracht ziehen. Weitere Informationen findest du unter Weiterleitungen im großen Maßstab verwalten.redirects
wird vor Middleware ausgeführt.
NextResponse.redirect
in Middleware
Middleware ermöglicht es, Code auszuführen, bevor eine Anfrage abgeschlossen wird. Dann können Sie basierend auf der eingehenden Anfrage mit NextResponse.redirect
zu einer anderen URL weiterleiten. Dies ist nützlich, wenn Sie Benutzer basierend auf einer Bedingung (z.B. Authentifizierung, Sitzungsverwaltung usw.) weiterleiten möchten oder eine große Anzahl von Weiterleitungen haben.
Ein Beispiel, um den Benutzer auf eine /login
-Seite weiterzuleiten, wenn er nicht authentifiziert ist:
Hinweis:
- Middleware wird nach
redirects
innext.config.js
und vor dem Rendering ausgeführt.
Weitere Informationen findest du in der Middleware-Dokumentation.
Weiterleitungen im großen Maßstab verwalten (fortgeschritten)
Um eine große Anzahl von Weiterleitungen (1000+) zu verwalten, solltest du eine benutzerdefinierte Lösung mit Middleware in Betracht ziehen. Dies ermöglicht es dir, Weiterleitungen programmgesteuert zu verarbeiten, ohne die Anwendung neu bereitstellen zu müssen.
Dabei musst du Folgendes berücksichtigen:
- Erstellen und Speichern einer Weiterleitungskarte.
- Optimieren der Datenlookup-Leistung.
Next.js-Beispiel: Ein Beispiel für die Implementierung der nachfolgenden Empfehlungen findest du in unserem Middleware mit Bloom-Filter-Beispiel.
1. Erstellen und Speichern einer Weiterleitungskarte
Eine Weiterleitungskarte ist eine Liste von Weiterleitungen, die du in einer Datenbank (normalerweise ein Schlüssel-Wert-Speicher) oder einer JSON-Datei speichern kannst.
Betrachte die folgende Datenstruktur:
In Middleware kannst du aus einer Datenbank wie Vercels Edge Config oder Redis lesen und den Benutzer basierend auf der eingehenden Anfrage weiterleiten:
2. Optimieren der Datenlookup-Leistung
Das Lesen eines großen Datensatzes für jede eingehende Anfrage kann langsam und teuer sein. Es gibt zwei Möglichkeiten, die Datenlookup-Leistung zu optimieren:
- Verwenden Sie eine Datenbank, die für schnelle Lesevorgänge optimiert ist, wie Vercel Edge Config oder Redis.
- Verwenden Sie eine Datenlookup-Strategie wie einen Bloom-Filter, um effizient zu überprüfen, ob eine Weiterleitung existiert, bevor die größere Weiterleitungsdatei oder -datenbank gelesen wird.
Ausgehend vom vorherigen Beispiel können Sie eine generierte Bloom-Filter-Datei in Middleware importieren und dann überprüfen, ob der eingehende Anfragepfad im Bloom-Filter existiert.
Wenn ja, leiten Sie die Anfrage an einen Route Handler weiter, der die tatsächliche Datei überprüft und den Benutzer zur entsprechenden URL weiterleitet. Dies vermeidet das Importieren einer großen Weiterleitungsdatei in Middleware, was jede eingehende Anfrage verlangsamen kann.
Dann, im Route Handler:
Hinweis:
- Um einen Bloom-Filter zu generieren, können Sie eine Bibliothek wie
bloom-filters
verwenden.- Sie sollten Anfragen an Ihren Route Handler validieren, um böswillige Anfragen zu verhindern.