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.
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 kann einen 307 (Temporäre Weiterleitung) oder 308 (Permanente Weiterleitung) Statuscode mit der Option permanent 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.
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 nachredirects in next.config.js und vor dem Rendering ausgeführt.
Weitere Informationen findest du in der Middleware-Dokumentation.
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.
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:
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 API-Route 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, in der API-Route:
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.