Aller au contenu

Sources et cibles

phil/redirects-bundle

Une redirection est un RedirectRule : une source, une cible, un statut, une politique de chaîne de requête et, facultativement, une locale.

Sources

SourcePattern contient un genre, un chemin et un hôte, ou aucun hôte pour tous les hôtes. Un chemin est gardé tel que le porte une requête : encodé en pourcentage. Un caractère hors de l'ASCII imprimable est encodé tel qu'il est écrit (/café devient /caf%C3%A9), une espace devient %20, et les chiffres hexadécimaux d'un échappement sont en majuscules. Une barre oblique finale est ignorée des deux côtés : /old et /old/ sont une même source et correspondent aux deux requêtes.

GenreS'écritCorrespond àDonne à la cible
exact/old/pagece chemin seulementrien
prefix/docs/docs et chaque chemin en dessous, segment par segment : pas /docsxle reste du chemin, ajouté à la cible
wildcard/blog/*/*** pour exactement un segment non vide, un ** final pour un nombre quelconque de segments, les autres littéralementchaque joker sous la forme $1, $2…
regex/item-(\d+)le chemin entier, ancréchaque groupe sous la forme $1, $2…

Un chemin source commence par un seul /, n'a ni caractère de contrôle, ni ?, ni #, ni \, ni segment vide, et compte au plus 2 048 caractères. Un hôte est un nom d'hôte, sans port, comparé en minuscules.

La syntaxe bornée des jokers

Une source à joker est une liste de segments, au plus 32, avec au plus neuf jokers. * vaut un segment entier, jamais une partie de segment : /a* est refusé, et /a* écrit comme source exacte est le chemin littéral. ** ne peut être que le dernier segment. La comparaison parcourt les segments une seule fois, sans aucune expression régulière : un chemin ne coûte pas plus que le nombre de segments de la source, quelle que soit sa longueur.

Expressions régulières

Une expression régulière est désactivée sauf si regex.enabled est défini, et elle n'est alors écrite que par un utilisateur qui a admin.regex_role, ou depuis la console. Elle compte de 1 à regex.max_length caractères, sans espace, caractère de contrôle ni #, et doit compiler. Elle est ancrée aux deux bouts. À l'exécution, elle est soumise aux limites de PCRE : un motif qui y échoue ne correspond à rien, et la requête reste introuvable.

Cibles

Target est l'un de ces genres :

CibleS'écritRemarques
Un chemin du site/new/page?x=1Commence par un seul / : //host est refusé.
Une URL absoluehttps://shop.example.com/Permise seulement si son hôte, lu par phil/url, figure dans allowed_hosts ; une adresse IP ou un seul nom est refusé.
Une routeroute:blog_post?slug=$1Générée avec ses paramètres ; une route impossible à générer laisse la requête introuvable.
Aucune(vide)Pour une 410 Gone seulement.

De $1 à $9, dans un chemin, une requête ou un paramètre de route, valent les valeurs que la source a capturées ; jamais dans un schéma ou un hôte. Une cible ne fait pas référence à plus de valeurs que n'en capture sa source : une source exacte ou un préfixe n'en capture aucune. Une valeur capturée est remise encodée en pourcentage : elle ne peut ainsi ajouter ni schéma, ni hôte, ni ligne à la destination.

Statut, chaîne de requête et locale

ChampValeursPar défaut
Statut301, 302, 307, 308, ou 410 Gone sans cible301
Politique de chaîne de requêtedrop abandonne la chaîne de requête, keep la garde après les propres paramètres de la cibledrop
Localeune locale comme fr ou fr_CA : la redirection ne s'applique qu'à une requête dans cette locale (Request::getLocale())aucune