Redirections
Les redirections vous permettent de rediriger un chemin de requête entrant vers un chemin de destination différent.
Pour utiliser les redirections, vous pouvez utiliser la clé redirects
dans next.config.js
:
redirects
est une fonction asynchrone qui attend un tableau d'objets avec les propriétés source
, destination
et permanent
:
source
: le motif de chemin de la requête entrante.destination
: le chemin vers lequel vous souhaitez rediriger.permanent
:true
oufalse
- sitrue
, utilise le code d'état 308 qui indique aux clients/moteurs de recherche de mettre en cache la redirection indéfiniment. Sifalse
, utilise le code d'état 307 qui est temporaire et non mis en cache.
Pourquoi Next.js utilise-t-il 307 et 308 ? Traditionnellement, un 302 était utilisé pour une redirection temporaire et un 301 pour une redirection permanente, mais de nombreux navigateurs ont modifié la méthode de requête de la redirection en
GET
, quelle que soit la méthode d'origine. Par exemple, si le navigateur effectuait une requêtePOST /v1/users
qui retournait un code d'état302
avec l'emplacement/v2/users
, la requête suivante pourrait êtreGET /v2/users
au lieu duPOST /v2/users
attendu. Next.js utilise les codes d'état 307 (redirection temporaire) et 308 (redirection permanente) pour préserver explicitement la méthode de requête utilisée.
basePath
:false
ouundefined
- sifalse
, lebasePath
ne sera pas inclus lors de la correspondance, peut être utilisé uniquement pour les redirections externes.locale
:false
ouundefined
- indique si la locale ne doit pas être incluse lors de la correspondance.has
: un tableau d'objets has avec les propriétéstype
,key
etvalue
.missing
: un tableau d'objets missing avec les propriétéstype
,key
etvalue
.
Les redirections sont vérifiées avant le système de fichiers, qui inclut les pages et les fichiers /public
.
Lorsque vous utilisez le routeur Pages, les redirections ne sont pas appliquées au routage côté client (Link
, router.push
) sauf si un Middleware est présent et correspond au chemin.
Lorsqu'une redirection est appliquée, toutes les valeurs de requête fournies dans la requête seront transmises à la destination de redirection. Par exemple, consultez la configuration de redirection suivante :
Bon à savoir : N'oubliez pas d'inclure la barre oblique
/
avant le deux-points:
dans les paramètres de chemin des cheminssource
etdestination
, sinon le chemin sera traité comme une chaîne littérale et vous risquez de provoquer des redirections infinies.
Lorsque /old-blog/post-1?hello=world
est demandé, le client sera redirigé vers /blog/post-1?hello=world
.
Correspondance de chemin
Les correspondances de chemin sont autorisées, par exemple /old-blog/:slug
correspondra à /old-blog/hello-world
(pas de chemins imbriqués) :
Correspondance de chemin avec joker
Pour correspondre à un chemin avec joker, vous pouvez utiliser *
après un paramètre, par exemple /blog/:slug*
correspondra à /blog/a/b/c/d/hello-world
:
Correspondance de chemin avec regex
Pour correspondre à un chemin avec regex, vous pouvez encapsuler la regex entre parenthèses après un paramètre, par exemple /post/:slug(\\d{1,})
correspondra à /post/123
mais pas à /post/abc
:
Les caractères suivants (
, )
, {
, }
, :
, *
, +
, ?
sont utilisés pour la correspondance de chemin avec regex, donc lorsqu'ils sont utilisés dans source
comme valeurs non spéciales, ils doivent être échappés en ajoutant \\
avant eux :
Correspondance d'en-tête, de cookie et de requête
Pour ne correspondre à une redirection que lorsque les valeurs d'en-tête, de cookie ou de requête correspondent également au champ has
ou ne correspondent pas au champ missing
, vous pouvez utiliser ces champs. À la fois source
et tous les éléments has
doivent correspondre, et tous les éléments missing
ne doivent pas correspondre pour que la redirection soit appliquée.
Les éléments has
et missing
peuvent avoir les champs suivants :
type
:String
- doit être soitheader
,cookie
,host
ouquery
.key
:String
- la clé du type sélectionné à comparer.value
:String
ouundefined
- la valeur à vérifier, siundefined
, n'importe quelle valeur correspondra. Une chaîne de type regex peut être utilisée pour capturer une partie spécifique de la valeur, par exemple si la valeurfirst-(?<paramName>.*)
est utilisée pourfirst-second
, alorssecond
pourra être utilisé dans la destination avec:paramName
.
Redirections avec support de basePath
Lorsque vous utilisez le support de basePath
avec des redirections, chaque source
et destination
est automatiquement préfixé avec le basePath
sauf si vous ajoutez basePath: false
à la redirection :
Redirections avec support i18n
Lorsque vous utilisez le support i18n
avec des redirections, chaque source
et destination
est automatiquement préfixé pour gérer les locales
configurées, sauf si vous ajoutez locale: false
à la redirection. Si locale: false
est utilisé, vous devez préfixer source
et destination
avec une locale pour qu'elle soit correctement correspondante.
Dans certains cas rares, vous pourriez avoir besoin d'attribuer un code d'état personnalisé pour que les anciens clients HTTP redirigent correctement. Dans ces cas, vous pouvez utiliser la propriété statusCode
au lieu de la propriété permanent
, mais pas les deux. Pour assurer la compatibilité avec IE11, un en-tête Refresh
est automatiquement ajouté pour le code d'état 308.
Autres redirections
- Dans les Routes API et les Gestionnaires de route, vous pouvez rediriger en fonction de la requête entrante.
- Dans
getStaticProps
etgetServerSideProps
, vous pouvez rediriger des pages spécifiques au moment de la requête.
Historique des versions
Version | Changements |
---|---|
v13.3.0 | Ajout de missing . |
v10.2.0 | Ajout de has . |
v9.5.0 | Ajout de redirects . |