Weiterleitungen
Weiterleitungen ermöglichen es Ihnen, einen eingehenden Anfragepfad auf einen anderen Zielpfad umzuleiten.
Um Weiterleitungen zu verwenden, können Sie den Schlüssel redirects
in next.config.js
nutzen:
redirects
ist eine asynchrone Funktion, die ein Array erwartet, das Objekte mit den Eigenschaften source
, destination
und permanent
enthält:
source
: Das Muster des eingehenden Anfragepfads.destination
: Der Pfad, zu dem umgeleitet werden soll.permanent
:true
oderfalse
- wenntrue
, wird der Statuscode 308 verwendet, der Clients/Suchmaschinen anweist, die Weiterleitung dauerhaft zu cachen. Beifalse
wird der temporäre Statuscode 307 verwendet, der nicht gecacht wird.
Warum verwendet Next.js 307 und 308? Traditionell wurde 302 für temporäre Weiterleitungen und 301 für permanente Weiterleitungen verwendet, aber viele Browser haben die Anfragemethode der Weiterleitung unabhängig von der ursprünglichen Methode auf
GET
geändert. Wenn beispielsweise ein Browser eine Anfrage anPOST /v1/users
sendete, die den Statuscode302
mit dem Standort/v2/users
zurückgab, könnte die nachfolgende AnfrageGET /v2/users
sein, anstatt des erwartetenPOST /v2/users
. Next.js verwendet die Statuscodes 307 (temporär) und 308 (permanent), um die verwendete Anfragemethode explizit beizubehalten.
basePath
:false
oderundefined
- wennfalse
, wird derbasePath
nicht beim Abgleich einbezogen. Kann nur für externe Weiterleitungen verwendet werden.locale
:false
oderundefined
- gibt an, ob die Locale beim Abgleich nicht einbezogen werden soll.has
: Ein Array von Has-Objekten mit den Eigenschaftentype
,key
undvalue
.missing
: Ein Array von Missing-Objekten mit den Eigenschaftentype
,key
undvalue
.
Weiterleitungen werden vor dem Dateisystem überprüft, das Seiten und /public
-Dateien enthält.
Bei Verwendung des Pages-Routers werden Weiterleitungen nicht auf clientseitiges Routing (Link
, router.push
) angewendet, es sei denn, Middleware ist vorhanden und passt zum Pfad.
Wenn eine Weiterleitung angewendet wird, werden alle in der Anfrage bereitgestellten Query-Werte an das Weiterleitungsziel übergeben. Beispielsweise siehe die folgende Weiterleitungskonfiguration:
Gut zu wissen: Denken Sie daran, den Schrägstrich
/
vor dem Doppelpunkt:
in den Pfadparametern dersource
- unddestination
-Pfade einzufügen, da der Pfad sonst als wörtliche Zeichenkette behandelt wird und Sie riskieren, Endlosschleifen zu verursachen.
Wenn /old-blog/post-1?hello=world
angefragt wird, wird der Client zu /blog/post-1?hello=world
weitergeleitet.
Pfadabgleich
Pfadabgleiche sind erlaubt, z.B. wird /old-blog/:slug
mit /old-blog/hello-world
übereinstimmen (keine verschachtelten Pfade):
Wildcard-Pfadabgleich
Um einen Wildcard-Pfad abzugleichen, können Sie *
nach einem Parameter verwenden, z.B. wird /blog/:slug*
mit /blog/a/b/c/d/hello-world
übereinstimmen:
Regex-Pfadabgleich
Um einen Regex-Pfad abzugleichen, können Sie den Regex in Klammern nach einem Parameter einschließen, z.B. wird /post/:slug(\\d{1,})
mit /post/123
übereinstimmen, aber nicht mit /post/abc
:
Die folgenden Zeichen (
, )
, {
, }
, :
, *
, +
, ?
werden für den Regex-Pfadabgleich verwendet. Wenn sie in der source
als nicht-spezielle Werte verwendet werden, müssen sie durch Voranstellen von \\
maskiert werden:
Header-, Cookie- und Query-Abgleich
Um eine Weiterleitung nur dann abzugleichen, wenn Header-, Cookie- oder Query-Werte ebenfalls übereinstimmen, kann das Feld has
verwendet werden, oder das Feld missing
, wenn sie nicht übereinstimmen sollen. Sowohl die source
als auch alle has
-Elemente müssen übereinstimmen, und alle missing
-Elemente dürfen nicht übereinstimmen, damit die Weiterleitung angewendet wird.
has
- und missing
-Elemente können folgende Felder haben:
type
:String
- muss entwederheader
,cookie
,host
oderquery
sein.key
:String
- der Schlüssel des ausgewählten Typs, gegen den abgeglichen werden soll.value
:String
oderundefined
- der zu überprüfende Wert. Wennundefined
, wird jeder Wert übereinstimmen. Ein regex-ähnlicher String kann verwendet werden, um einen bestimmten Teil des Werts zu erfassen, z.B. wenn der Wertfirst-(?<paramName>.*)
fürfirst-second
verwendet wird, kannsecond
im Ziel mit:paramName
verwendet werden.
Weiterleitungen mit basePath-Unterstützung
Wenn Sie basePath
-Unterstützung mit Weiterleitungen nutzen, werden jeder source
- und destination
-Pfad automatisch mit dem basePath
präfixiert, es sei denn, Sie fügen basePath: false
zur Weiterleitung hinzu:
Weiterleitungen mit i18n-Unterstützung
Wenn Sie i18n
-Unterstützung mit Weiterleitungen nutzen, werden jeder source
- und destination
-Pfad automatisch präfixiert, um die konfigurierten locales
zu handhaben, es sei denn, Sie fügen locale: false
zur Weiterleitung hinzu. Wenn locale: false
verwendet wird, müssen Sie source
und destination
mit einer Locale präfixieren, damit sie korrekt abgeglichen werden können.
In seltenen Fällen müssen Sie möglicherweise einen benutzerdefinierten Statuscode für ältere HTTP-Clients festlegen, um eine korrekte Weiterleitung zu ermöglichen. In diesen Fällen können Sie die Eigenschaft statusCode
anstelle von permanent
verwenden, aber nicht beide. Um die Kompatibilität mit IE11 sicherzustellen, wird für den Statuscode 308 automatisch ein Refresh
-Header hinzugefügt.
Andere Weiterleitungen
- Innerhalb von API-Routen und Route Handlern können Sie basierend auf der eingehenden Anfrage weiterleiten.
- Innerhalb von
getStaticProps
undgetServerSideProps
können Sie bestimmte Seiten zur Laufzeit weiterleiten.
Versionsverlauf
Version | Änderungen |
---|---|
v13.3.0 | missing hinzugefügt. |
v10.2.0 | has hinzugefügt. |
v9.5.0 | redirects hinzugefügt. |