rewrites
Mit Rewrites kannst du einen eingehenden Anfragepfad auf einen anderen Zielpfad umleiten.
Rewrites fungieren als URL-Proxy und maskieren den Zielpfad, sodass es für Benutzer so aussieht, als hätten sie ihren Standort auf der Website nicht gewechselt. Im Gegensatz dazu leiten Redirects zu einer neuen Seite weiter und zeigen die URL-Änderungen an.
Um Rewrites zu verwenden, kannst du den rewrites
-Schlüssel in next.config.js
nutzen:
Rewrites werden auch auf clientseitiges Routing angewendet. Im obigen Beispiel wird das Rewrite auf einen <Link href="/about">
angewendet.
rewrites
ist eine asynchrone Funktion, die entweder ein Array oder ein Objekt von Arrays (siehe unten) mit Objekten zurückgibt, die source
- und destination
-Eigenschaften enthalten:
source
:String
- ist das Muster des eingehenden Anfragepfads.destination
:String
- ist der Pfad, zu dem weitergeleitet werden soll.basePath
:false
oderundefined
- wenn false, wird der basePath beim Abgleich nicht einbezogen, kann nur für externe Rewrites verwendet werden.locale
:false
oderundefined
- ob die Locale beim Abgleich nicht einbezogen werden soll.has
ist ein Array von has-Objekten mit den Eigenschaftentype
,key
undvalue
.missing
ist ein Array von missing-Objekten mit den Eigenschaftentype
,key
undvalue
.
Wenn die rewrites
-Funktion ein Array zurückgibt, werden die Rewrites nach der Überprüfung des Dateisystems (Seiten und /public
-Dateien) und vor dynamischen Routen angewendet. Wenn die rewrites
-Funktion ein Objekt von Arrays mit einer spezifischen Form zurückgibt, kann dieses Verhalten geändert und feiner gesteuert werden, ab Next.js v10.1
:
Hinweis: Rewrites in
beforeFiles
überprüfen nicht sofort nach dem Abgleich einer Quelle das Dateisystem/dynamische Routen, sie werden fortgesetzt, bis allebeforeFiles
überprüft wurden.
Die Reihenfolge, in der Next.js-Routen überprüft werden:
- Headers werden überprüft/angewendet
- Redirects werden überprüft/angewendet
beforeFiles
-Rewrites werden überprüft/angewendet- Statische Dateien aus dem public-Verzeichnis,
_next/static
-Dateien und nicht-dynamische Seiten werden überprüft/bereitgestellt afterFiles
-Rewrites werden überprüft/angewendet, wenn eines dieser Rewrites übereinstimmt, überprüfen wir nach jeder Übereinstimmung dynamische Routen/statische Dateienfallback
-Rewrites werden überprüft/angewendet, diese werden vor dem Rendern der 404-Seite und nach der Überprüfung dynamischer Routen/aller statischen Assets angewendet. Wenn du fallback: true/'blocking' ingetStaticPaths
verwendest, werden die in deinernext.config.js
definierten Fallback-rewrites
nicht ausgeführt.
Rewrite-Parameter
Wenn Parameter in einem Rewrite verwendet werden, werden die Parameter standardmäßig in der Query übergeben, wenn keiner der Parameter im destination
verwendet wird.
Wenn ein Parameter im Ziel verwendet wird, wird keiner der Parameter automatisch in der Query übergeben.
Du kannst die Parameter trotzdem manuell in der Query übergeben, wenn bereits einer im Ziel verwendet wird, indem du die Query im destination
angibst.
Hinweis: Parameter aus Rewrites für statische Seiten von der Automatischen Statischen Optimierung oder dem Prerendering werden nach der Hydration clientseitig geparst und in der Query bereitgestellt.
Pfadabgleich
Pfadabgleiche sind erlaubt, zum Beispiel wird /blog/:slug
mit /blog/hello-world
übereinstimmen (keine verschachtelten Pfade):
Wildcard-Pfadabgleich
Um einen Wildcard-Pfad abzugleichen, kannst du *
nach einem Parameter verwenden, zum Beispiel wird /blog/:slug*
mit /blog/a/b/c/d/hello-world
übereinstimmen:
Regex-Pfadabgleich
Um einen Regex-Pfad abzugleichen, kannst du den Regex nach einem Parameter in Klammern einschließen, zum Beispiel wird /blog/:slug(\\d{1,})
mit /blog/123
übereinstimmen, aber nicht mit /blog/abc
:
Die folgenden Zeichen (
, )
, {
, }
, [
, ]
, |
, \
, ^
, .
, :
, *
, +
, -
, ?
, $
werden für den Regex-Pfadabgleich verwendet, daher müssen sie, wenn sie in der source
als nicht-spezielle Werte verwendet werden, durch Voranstellen von \\
escapt werden:
Header-, Cookie- und Query-Abgleich
Um ein Rewrite nur dann abzugleichen, wenn Header-, Cookie- oder Query-Werte auch mit dem has
-Feld übereinstimmen oder nicht mit dem missing
-Feld übereinstimmen, können diese Felder verwendet werden. Sowohl die source
als auch alle has
-Elemente müssen übereinstimmen und alle missing
-Elemente dürfen nicht übereinstimmen, damit das Rewrite angewendet wird.
has
- und missing
-Elemente können folgende Felder haben:
type
:String
- muss entwederheader
,cookie
,host
oderquery
sein.key
:String
- der Schlüssel aus dem ausgewählten Typ, gegen den abgeglichen werden soll.value
:String
oderundefined
- der zu überprüfende Wert, wenn undefined, stimmt jeder Wert überein. 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, dann wirdsecond
im Ziel mit:paramName
verwendbar sein.
Umleitung zu einer externen URL
Rewrites ermöglichen die Umleitung zu einer externen URL. Dies ist besonders nützlich für die schrittweise Einführung von Next.js. Das folgende Beispiel zeigt ein Rewrite für die Umleitung der /blog
-Route deiner Hauptanwendung zu einer externen Website.
Wenn du trailingSlash: true
verwendest, musst du auch einen abschließenden Schrägstrich im source
-Parameter einfügen. Wenn der Zielserver ebenfalls einen abschließenden Schrägstrich erwartet, sollte dieser auch im destination
-Parameter enthalten sein.
Schrittweise Einführung von Next.js
Du kannst Next.js auch so konfigurieren, dass es nach der Überprüfung aller Next.js-Routen auf ein bestehendes Proxy-Website zurückfällt.
Auf diese Weise musst du die Rewrites-Konfiguration nicht ändern, wenn du weitere Seiten zu Next.js migrierst.
Rewrites mit basePath-Unterstützung
Bei der Nutzung der basePath
-Unterstützung mit Rewrites wird jede source
und destination
automatisch mit dem basePath
versehen, es sei denn, du fügst basePath: false
zum Rewrite hinzu:
Rewrites mit i18n-Unterstützung
Bei der Nutzung der i18n
-Unterstützung mit Rewrites wird jede source
und destination
automatisch angepasst, um die konfigurierten locales
zu berücksichtigen, es sei denn, du fügst locale: false
zum Rewrite hinzu. Wenn locale: false
verwendet wird, musst du die source
und destination
mit einer Locale versehen, damit sie korrekt übereinstimmen.
Versionshistorie
Version | Änderungen |
---|---|
v13.3.0 | missing hinzugefügt. |
v10.2.0 | has hinzugefügt. |
v9.5.0 | Headers hinzugefügt. |