Redirections d'URL
Restructurer un site retire des URL. Sans redirection, la seule réponse possible sur un chemin retiré est un 404, et chaque lien indexé, favori et backlink qui pointe vers lui se casse.
Le tableau redirects déclare ces chemins retirés et l'endroit où chacun vit désormais :
redirects:
- from: /products/platform
to: /
- from: /products/partner
to: /partner
- from: /login
to: /_admin/login
status: 302Propriétés d'une règle
| Propriété | Description |
|---|---|
from |
Chemin relatif à la racine à rediriger. Doit commencer par / et ne contenir ni espace, ni ?, ni #. |
to |
Où envoyer le visiteur — un chemin relatif à la racine, ou une URL absolue http(s):// pour passer la main à une autre origine. |
status |
301 (par défaut), 302, 307 ou 308. |
Les chaînes de requête ne font pas partie de la clé de correspondance. Une chaîne de requête entrante est préservée et reportée sur la cible ; il est donc inutile d'en encoder une dans from. Si to porte déjà sa propre chaîne de requête, l'entrante y est ajoutée avec &.
Choisir un statut
| Statut | Signification | À utiliser quand |
|---|---|---|
301 |
Moved Permanently — transfère la popularité des liens | L'URL est retirée définitivement. C'est le défaut et la norme. |
302 |
Found — temporaire, peut réécrire la méthode de la requête | Le déplacement est temporaire et la méthode n'a pas d'importance. |
307 |
Temporary Redirect — temporaire, préserve la méthode | Un déplacement temporaire qui doit conserver un POST en POST. |
308 |
Permanent Redirect — permanent, préserve la méthode | Un déplacement permanent qui doit conserver la méthode de la requête. |
Gestion des langues
Un from est mis en correspondance de la même façon que les chemins de pages sont écrits. Une règle nue correspond au chemin brut et à chacune de ses variantes préfixées par une langue, et un to de type chemin hérite de la langue de la requête — une seule règle sert donc toutes les locales, et un visiteur français atterrit sur le remplacement français, jamais sur l'anglais :
redirects:
- from: /pricing
to: /plansCette unique règle répond à /pricing, /en/pricing et /fr/pricing, en envoyant chacun respectivement vers /plans, /en/plans et /fr/plans.
Pour ne cibler qu'une seule locale, écrivez le segment de langue dans from. Une règle dont le chemin commence déjà par un code de langue configuré est mise en correspondance littéralement :
redirects:
- from: /fr/tarifs
to: /fr/plansUn to absolu est utilisé tel quel, sans aucune gestion de langue, puisqu'il quitte entièrement l'application.
N'écrivez pas à la main la règle pour un chemin sans préfixe
Un /docs nu qui répond 404 alors que /en/docs est servi est le seul cas où une règle de redirection paraît évidente et se révèle destructrice. Le moteur s'en charge déjà — voir URL sans segment de langue — et les deux formes écrites à la main sont désormais rejetées au décodage, car from est mis en correspondance indépendamment de la locale et revendique donc aussi les URL localisées bien vivantes :
{ from: '/docs', to: '/en/docs' }
/docs → 301 /en/docs le cas que vous vouliez
/en/docs → 301 /en/en/docs la doc anglaise en ligne, désormais un 404
/fr/docs → 301 /fr/en/docs la doc française en ligne, désormais un 404Recourir à localizeTarget: false corrige le double préfixe et crée pire encore — la règle renvoie désormais l'URL en ligne vers elle-même :
{ from: '/docs', to: '/en/docs', localizeTarget: false }
/docs → 301 /en/docs le cas que vous vouliez
/en/docs → 301 /en/docs boucle de redirection infinie du navigateur
/fr/docs → 301 /en/docs la doc française, inaccessibleLes deux passaient autrefois sovrium validate et cassaient la zone de documentation à l'exécution. Elles y échouent désormais — voir Validation.
Priorité
Les redirections sont évaluées après les ressources statiques et avant les pages :
- Un fichier réel du répertoire public — une règle de redirection ne peut jamais détourner une ressource servie.
- Les règles de redirection.
- La résolution des pages.
- Le fourre-tout 404.
Une règle l'emporte donc toujours sur une page. Cela vaut dans les deux sens : un from qui correspond à un chemin que vous servez encore rend cette page inaccessible.
Vos règles sont également évaluées avant la canonicalisation d'URL : from est donc comparé au chemin exactement tel que le navigateur l'a envoyé, barre oblique finale comprise.
Les redirections se résolvent en exactement un saut. Une requête qui correspond émet une seule redirection, et la cible n'est jamais remise en correspondance avec la table — Location vaut donc toujours littéralement ce que vous avez écrit. Les chaînes ne sont pas réduites : si /a doit aboutir à /c, écrivez /a → /c, pas /a → /b → /c.
Validation
Des règles portant sur la table entière sont appliquées au décodage de la configuration, de sorte qu'une table cassée fait échouer sovrium validate au lieu de partir en production. Toutes existent pour la même raison : le serveur ne résout jamais qu'un seul saut et ne peut donc pas boucler — mais le navigateur, lui, suit chaque nouvelle règle à son tour et ne se stabilise jamais.
| Forme rejetée | Exemple | Pourquoi |
|---|---|---|
from en double |
deux règles pour /pricing |
Chaque chemin ne peut déclarer qu'une seule règle. |
| Auto-redirection | { from: '/a', to: '/a' } |
Une règle qui pointe vers son propre from boucle indéfiniment. |
| Cycle | /a → /b avec /b → /a |
Le navigateur suit chaque règle à son tour et n'arrive jamais. |
| Double préfixe de locale | { from: '/docs', to: '/en/docs' } |
from est indépendant de la locale : le /en/docs en ligne y correspond aussi et la cible est préfixée une seconde fois — /en/en/docs, un 404. |
| Auto-boucle avec l'option de sortie | { from: '/docs', to: '/en/docs', localizeTarget: false } |
from correspond toujours à chaque variante de locale : /en/docs est donc renvoyé tel quel vers /en/docs — une boucle infinie. |
| Auto-redirection par barre finale | { from: '/x', to: '/x/' } |
/x/ est normalisé en /x, qui réactive cette règle. La forme émise et la forme canonique sont toutes deux comparées. |
Les trois dernières tiennent compte de la locale et de la barre oblique finale, et sont nouvelles. { from: '/x/', to: '/x' } reste valide — elle émet /x, qui ne correspond à rien, et se termine donc. { from: '/en', to: '/en/' } est désormais rejetée : elle ne fait que dupliquer la redirection /en → /en/ du moteur lui-même.
Le contrôle sur l'option de sortie est délibérément étroit. { from: '/login', to: '/_admin/login', localizeTarget: false } est la raison d'être de localizeTarget et reste valide ; { from: '/legacy', to: '/en/docs', localizeTarget: false } est d'un goût douteux mais ne boucle pas, et n'est pas rejetée non plus.
Les cibles relatives au protocole (//example.com) sont également rejetées. Un navigateur les résout comme des URL absolues vers une autre origine, ce qui ferait de la table de redirections une primitive de redirection ouverte ; un passage de main vers une autre origine doit expliciter https:// afin que l'intention soit visible en relecture.
La collision avec une route dynamique n'est pas détectée pour vous. La validation ne compare from qu'aux chemins de pages statiques. Si votre application sert une route dynamique telle que /blog/:slug, une règle pour /blog/my-post masquera silencieusement cet article — aucune erreur au démarrage, aucun échec de validation. Confrontez les slugs retirés au contenu qui existe encore.
Pages connexes
- Métadonnées de l'application — les autres propriétés racines d'identité.
- Présentation des pages — la résolution de pages devant laquelle s'exécutent les redirections.
- Langues — les codes de langue configurés qui pilotent la correspondance par préfixe.
- SEO et métadonnées — les URL canoniques, avec lesquelles un 301 doit s'accorder.
Dernière mise à jour 1 septembre 2026
Cette documentation a été rédigée avec de l'IA : des erreurs ou du contenu obsolète sont donc possibles. Sovrium est en bêta. Les contributions et corrections sont les bienvenues.