Routage et chemins
Le path d'une page est l'URL à laquelle elle répond. Il est comparé littéralement, sauf s'il contient un segment :param ou *, auquel cas il devient un motif.
Formes de chemin
| Forme | Exemple | Correspond à |
|---|---|---|
| Racine | / |
La page d'accueil. |
| Statique | /about |
Ce chemin exact, et rien d'autre. |
| Imbriquée | /settings/billing |
Un nombre quelconque de segments statiques. |
| Dynamique | /blog/:slug |
Un segment, capturé sous le nom slug. |
| Catch-all | /docs/:rest* |
Le reste du chemin, capturé sous rest — doit être le dernier segment. |
| Joker | /files/* |
Tout ce qui se trouve sous /files/, sans nom de capture. |
Un chemin doit correspondre à ^/[a-z0-9-_/:*]*$ : il commence par /, et seules les minuscules sont admises. /users/:userId est rejeté — écrivez /users/:userid, ou mieux, /users/:id.
Un chemin sans : ni * est comparé comme une chaîne exacte. Aucune correspondance de préfixe, aucune tolérance sur la barre oblique finale. /about ne répond pas à /about/.
Segments dynamiques
Un segment :param capture exactement un segment de chemin — jamais au-delà d'un /. /blog/:slug correspond à /blog/hello mais pas à /blog/2026/hello ; utilisez /blog/:slug* pour ce dernier cas.
Les routes dynamiques sont généralement associées à un bloc collection, afin qu'une seule définition de page génère une route par enregistrement :
pages:
- name: Blog Post
path: /blog/:slug
collection: { table: posts, slugField: slug }
components:
- { type: text, tag: h1, content: '$record.title' }
Voir Collections et markdown pour le contrat de collection.
Routes de détail d'enregistrement
Pour servir un seul enregistrement à une URL sans générer une route par enregistrement, associez un segment dynamique à une source de données en mode single. param nomme le segment de chemin d'où lire l'identifiant :
pages:
- name: Task
path: /tasks/:id
dataSource:
table: tasks
mode: single
param: id
components:
- { type: text, tag: h1, content: '$record.title' }
- { type: text, content: '$record.description' }
Une requête dont le paramètre ne correspond à aucun enregistrement renvoie un 404.
$id n'est pas une syntaxe de chemin. $ n'est pas un caractère légal dans un path, donc /tasks/$id échoue à la validation. Le marqueur de segment dynamique est : partout ; $record.* est une référence de contenu, pas de route.
Le segment de langue
Sovrium ne préfixe pas vos chemins à votre place. Lorsque app.languages est configuré, le runtime lit le premier segment du chemin et, s'il correspond à un code de langue configuré, celui-ci devient la langue active pour la résolution des traductions $t:.
Les routes localisées sont donc déclarées explicitement — une page par langue, chacune portant son propre segment :
pages:
- { name: home-en, path: /en, components: [{ type: hero, content: 'hero.title' }] }
- { name: home-fr, path: /fr, components: [{ type: hero, content: 'hero.title' }] }
Ordre de résolution
Une requête entrante est traitée par le premier élément correspondant :
- Un fichier réel du répertoire public.
- Une règle de redirection.
- Un chemin de page.
- Le fourre-tout 404.
Pages connexes
- Présentation des pages — le tableau complet des propriétés de page.
- Collections et markdown — une route par enregistrement.
- Liaison de données —
mode: singleetparam. - Redirections — retirer un chemin sans casser les liens.
- Langues — configurer les codes de langue et les clés
$t:.
Dernière mise à jour 27 juillet 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.