Comment gérer les redirections dans Next.js
Il existe plusieurs façons de gérer les redirections dans Next.js. Cette page présente chaque option disponible, leurs cas d'utilisation et comment gérer un grand nombre de redirections.
API | Objectif | Emplacement | Code de statut |
---|---|---|---|
useRouter | Effectuer une navigation côté client | Composants | N/A |
redirects dans next.config.js | Rediriger une requête entrante basée sur un chemin | Fichier next.config.js | 307 (Temporaire) ou 308 (Permanent) |
NextResponse.redirect | Rediriger une requête entrante basée sur une condition | Middleware | Quelconque |
Hook useRouter()
Si vous devez rediriger dans un composant, vous pouvez utiliser la méthode push
du hook useRouter
. Par exemple :
Bon à savoir :
- Si vous n'avez pas besoin de naviguer programmatiquement un utilisateur, utilisez plutôt un composant
<Link>
.
Consultez la référence API de useRouter
pour plus d'informations.
redirects
dans next.config.js
L'option redirects
dans le fichier next.config.js
permet de rediriger un chemin de requête entrant vers une destination différente. C'est utile lorsque vous changez la structure d'URL des pages ou avez une liste de redirections connues à l'avance.
redirects
prend en charge la correspondance de chemin, d'en-tête, de cookie et de requête, offrant la flexibilité de rediriger les utilisateurs en fonction d'une requête entrante.
Pour utiliser redirects
, ajoutez l'option à votre fichier next.config.js
:
Consultez la référence API de redirects
pour plus d'informations.
Bon à savoir :
redirects
peut retourner un code de statut 307 (Redirection Temporaire) ou 308 (Redirection Permanente) avec l'optionpermanent
.redirects
peut avoir une limite sur certaines plateformes. Par exemple, sur Vercel, la limite est de 1 024 redirections. Pour gérer un grand nombre de redirections (1000+), envisagez une solution personnalisée avec Middleware. Voir gérer les redirections à grande échelle pour plus d'informations.redirects
s'exécute avant le Middleware.
NextResponse.redirect
dans Middleware
Le Middleware permet d'exécuter du code avant qu'une requête soit complétée. Ensuite, en fonction de la requête entrante, redirigez vers une URL différente avec NextResponse.redirect
. C'est utile pour rediriger les utilisateurs en fonction d'une condition (ex : authentification, gestion de session) ou pour gérer un grand nombre de redirections.
Par exemple, pour rediriger l'utilisateur vers une page /login
s'il n'est pas authentifié :
Bon à savoir :
- Le Middleware s'exécute après
redirects
dansnext.config.js
et avant le rendu.
Consultez la documentation sur le Middleware pour plus d'informations.
Gérer les redirections à grande échelle (avancé)
Pour gérer un grand nombre de redirections (1000+), vous pouvez envisager une solution personnalisée avec Middleware. Cela permet de gérer les redirections programmatiquement sans avoir à redéployer votre application.
Pour ce faire, vous devrez considérer :
- Créer et stocker une carte de redirections.
- Optimiser les performances de recherche de données.
Exemple Next.js : Consultez notre exemple Middleware avec filtre de Bloom pour une implémentation des recommandations ci-dessous.
1. Créer et stocker une carte de redirections
Une carte de redirections est une liste de redirections que vous pouvez stocker dans une base de données (généralement un magasin clé-valeur) ou un fichier JSON.
Considérez la structure de données suivante :
Dans le Middleware, vous pouvez lire depuis une base de données comme Edge Config de Vercel ou Redis, et rediriger l'utilisateur en fonction de la requête entrante :
2. Optimisation des performances de recherche de données
Lire un grand ensemble de données pour chaque requête entrante peut être lent et coûteux. Il existe deux façons d'optimiser les performances de recherche de données :
- Utiliser une base de données optimisée pour les lectures rapides
- Utiliser une stratégie de recherche de données comme un filtre de Bloom (Bloom filter) pour vérifier efficacement si une redirection existe avant de lire le fichier ou la base de données de redirections plus volumineux.
En reprenant l'exemple précédent, vous pouvez importer un fichier de filtre de Bloom généré dans le Middleware, puis vérifier si le chemin de la requête entrante existe dans le filtre de Bloom.
Si c'est le cas, transférez la requête vers un API Routes qui vérifiera le fichier réel et redirigera l'utilisateur vers l'URL appropriée. Cela évite d'importer un gros fichier de redirections dans le Middleware, ce qui peut ralentir chaque requête entrante.
Ensuite, dans l'API Route :
Bon à savoir :
- Pour générer un filtre de Bloom, vous pouvez utiliser une bibliothèque comme
bloom-filters
.- Vous devriez valider les requêtes faites à votre Route Handler pour prévenir les requêtes malveillantes.