From: Lucien Gentis Date: Fri, 3 Jul 2026 15:58:10 +0000 (+0000) Subject: fr doc XML file update. X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6afb3992e81fe87414a9b4e98d356ff40cd6054c;p=thirdparty%2Fapache%2Fhttpd.git fr doc XML file update. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1935851 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/docs/manual/rewrite/flags.xml.fr b/docs/manual/rewrite/flags.xml.fr index 1edc0fe173..726d5a79a4 100644 --- a/docs/manual/rewrite/flags.xml.fr +++ b/docs/manual/rewrite/flags.xml.fr @@ -1,7 +1,7 @@ - + @@ -37,12 +37,11 @@ des explications détaillées et des exemples.

Introduction à mod_rewrite Redirection and remise en correspondance -Contrôle d'accès +Réécritures par répertoire Serveurs virtuels -Mise en cache Utilisation de RewriteMap -Techniques avancées Quand ne pas utiliser mod_rewrite +Détails techniques
Introduction

Le comportement d'une directive -

Les drapeaux qui modifient les métadonnées associées à la requête -(T=, H=, E=) n'ont aucun effet dans un contexte de répertoire ou de -fichier htaccess, lorsqu'une substitution (autre que '-') est effectuée -au cours de la même passe du processus de réécriture. -

+

Les drapeaux qui modifient les métadonnées associées à la requête (T=, H=, +E=) n'ont aucun effet dans un contexte de +répertoire ou de fichier htaccess, lorsqu'une substitution (autre que +'-') est effectuée au cours de la même passe du processus de réécriture.

Chaque drapeau disponible est présenté ici, avec un exemple d'utilisation.

+
Référence rapide des drapeaux + +

Les drapeaux peuvent être combinés : [R=301,L], [P,QSA], +[E=VAR:val,L]. Cette table les groupe par fonction et les trie +selon la fréquence de leur utilisation.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DrapeauFonctionEffetCombinaisons courantes
Contrôle de flux
[L]Dernière règleArrête le traitement des règles (pour cette passe)[R=301,L] [F] [G]
[END]Arrêt completArrête tout le processus de réécriture (pas de réentrance dans .htaccess)[R=301,END]
[S=N]SautSauter les N prochaines règles (logique if/else)
[N]Instance suivante de la boucleRedémarrer le traitement du jeu de règles à partir de la première + (attention : risque de boucle infinie)
[C]ChaînageChaîner la règle actuelle à la prochaine ; si la règle actuelle échoue, + sauter les règles chaînées
Redirection et mandatement
[R=code]RedirectionRedirection externe (par défaut 302). Utilisez Redirect/RedirectMatch pour + les cas simple[R=301,L] [R=302,L]
[P]MandatementMandatement inverse vers une cible (nécessite mod_proxy)[P,QSA]
Contrôle d’accès
[F]InterdictionRenvoie 403 (implique [L])
[G]PartiRenvoie 410 (implique [L])
URL / chaîne de paramètres
[QSA]Ajout de la chaîne de paramètresAjout de la chaîne de paramètres originelle à la substitution[QSA,L] [P,QSA]
[QSD]Suppression de la chaîne de paramètresSupprime entièrement la chaîne de paramètres[R=301,QSD,L]
[B]Échappement des références arrièresRéencode les caractères spéciaux dans les références arrières[B,PT]
[NE]Pas d’échappementPas d’échappement des caractères spéciaux dans la sortie (pass #, ? through)[R=301,NE,L]
Metadonnées et gestionnaires
[E]Définition d’une variable d’environnementDéfinit une variable d’environnement[E=VAR:val,L]
[T]Type MIMEForçage du type de contenu
[H]GestionnaireForçage d’un gestionnaire de contenu
[PT]Transmission résultatTransmission du résultat au gestionnaire suivant (requis pour Alias/ScriptAlias)[PT,L]
Cookie
[CO]Définir un cookieDéfinir un cookie HTTP pour la réponse[CO=name:val:.domain,R=302,L]
+ +
+
B (échappement dans les références arrières)

Avec le drapeau [B], la directive RewriteRule échappe les caractères @@ -142,8 +281,13 @@ RewriteRule "^search/(.*)$" "/search.php?term=$1" "[B= ?]"

Pour définir la liste des caractères à échapper de cette manière, voir #flag_bne et #flag_bctls

+

Voir Encodage et décodage des URLs pour une +explication détaillée de la manière dont httpd décode les URIs avant la mise en +correspondance des motifs.

+
+
BNP|backrefnoplus (ne pas échapper l'espace en +)

Si le drapeau [BNP] est spécifié, la directive Ce drapeau est disponible à partir de la version 2.4.26 du serveur HTTP Apache.

+

Voir Encodage et décodage des URLs pour +découvrir la manière dont l’encodage est géré dans le tube (pipeline) de +réécriture.

+
BCTLS @@ -174,7 +322,7 @@ rejetés lorsqu'ils sont copiés dans la chaîne de paramètres non codée. RewriteRule "^search/(.*)$" "/search.php/$1" "[BCTLS]" -

Ce drapeau est disponible à partir de la version 2.5.1 du serveur HTTP +

Ce drapeau est disponible à partir de la version 2.4.57 du serveur HTTP Apache.

@@ -189,7 +337,7 @@ correspondant aux drapeaux [B] ou [BCTLS]. Ils ne seront donc pas échappés. RewriteRule "^search/(.*)$" "/search.php?term=$1" "[B,BNE=/]" -

Ce drapeau est disponible à partir de la version 2.5.1 du serveur HTTP +

Ce drapeau est disponible à partir de la version 2.4.57 du serveur HTTP Apache.

@@ -202,6 +350,19 @@ normalement et passe le contrôle à la règle suivante. Par contre, si elle ne s'applique pas, la règle suivante, ainsi que toutes les règles chaînées qui suivent, seront sautées.

+ +# Réécrire les URLs des anciens produits vers la nouvelle application du +# catalogue, et ajouter un paramètre de traçage — mais seulement pour ceux qui +# sont réécrits. +RewriteRule "^/products/([0-9]+)$" "/catalog/item/$1" [C] +RewriteRule "^/catalog/(.*)$" "/catalog/$1?via=legacy" [QSA] + + +

Sans le drapeau [C], la seconde règle s’appliquerait aux requêtes qui +arrivent directement à /catalog/. Le chaînage des deux règles +permet de s’assurer que la seconde règle ne s’appliquera que si la première +s’applique.

+
CO|cookie @@ -245,7 +406,7 @@ ce style de cookie est interdit par le modèle de sécurité des cookies.
Lifetime
La durée de vie du cookie, en minutes.
-
Une valeur de 0 indique une durée de vie correspondant à la session +
Une valeur de 0 indique une durée de vie correspondant à lasession courante du navigateur. Il s'agit de la valeur par défaut.
Une valeur négative indique que la définition du cookie doit être annulée dans le navigateur.
@@ -295,24 +456,26 @@ pour tous les URIs.

DPI|discardpath -

Avec le drapeau DPI, la partie PATH_INFO de l'URI -réécrit est supprimée.

-

Ce drapeau est disponible dans les versions 2.2.12 et supérieures.

-

Dans un contexte de répertoire, l'URI mis en comparaison par chaque -règle RewriteRule est la concaténation des -valeurs courantes de l'URI et de PATH_INFO.

- -

L'URI courant peut être l'URI initial tel qu'il a été fourni par le +

Avec le drapeau DPI, la partie PATH_INFO +qui a été ajoutée au chemin d’URL réécrit est +supprimée.

+ +

Dans un contexte de répertoire, le +chemin d’URL que compare chaque +RewriteRule est la concaténation des valeurs courantes du +chemin d’URL et de PATH_INFO.

+ +

Le chemin d’URL actuel peut être le chemin initial tel qu'il a été fourni par le client, le résultat d'une passe précédente du processus de réécriture, -ou le résultat de la règle précédente dans le processus courant de +ou le résultat de la règle précédente de la passe actuelle du processus de réécriture.

-

Par contre, la partie PATH_INFO ajoutée à l'URI avant chaque règle ne -reflète que la valeur de PATH_INFO avant la passe courante du processus -de réécriture. En conséquence, si de larges portions de l'URI -correspondent et sont traduites via plusieurs directives +

Par contre, la partie PATH_INFO ajoutée au chemin d’URL avant chaque règle ne +reflète que la valeur de PATH_INFO avant la passe actuelle du processus +de réécriture. En conséquence, si de larges portions du chemin d’URL +correspondent et sont copiées dans une substitution via plusieurs directives RewriteRule, sans prendre en compte -quelles parties de l'URI provenaient du PATH_INFO courant, l'URI final +quelles parties du chemin d’URL provenaient du PATH_INFO actuel, le chemin d’URL final pourra se voir ajouter plusieurs copies de PATH_INFO.

Utilisez ce drapeau pour toute substitution où la présence du PATH_INFO qui @@ -323,6 +486,18 @@ débute est oublié. PATH_INFO ne sera pas recalculé tant que la passe courante du processus de réécriture ne sera pas achevée. Les règles suivantes de cette passe ne verront que le résultat direct des substitutions, sans aucun PATH_INFO ajouté.

+ + +# Requête : /app/script.php/extra/path (PATH_INFO contient /extra/path) +# Sans le drapeau DPI, la substitution serait "script.php/extra/path" et +# pourrait par accident copier PATH_INFO dans le résultat. +RewriteRule "^script\.php(.*)$" "/new-app/handler$1" [DPI] + + +

Le drapeau DPI supprime /extra/path, de sorte que seul le +résultat de la substitution est transmis aux règles suivantes ou à la requête +finale.

+
E|env @@ -364,7 +539,7 @@ comme les programmes CGI, d'autres directives RewriteRule, ou des directives CustomLog.

L'exemple suivant définit une variable d'environnement nommée 'image' -avec une valeur de '1' si l'URI de la requête correspond à un fichier +avec une valeur de '1' si le chemin d’URL de la requête correspond à un fichier image. Cette variable d'environnement est ensuite utilisée pour exclure une telle requête du journal des accès.

@@ -376,16 +551,88 @@ CustomLog "logs/access_log" combined env=!image

Notez que le même effet peut être obtenu à l'aide de la directive SetEnvIf. Cette technique est présentée à titre d'exemple et non de recommandation.

+ + +

Définir des variables d’environnement pour tracer les réécritures

+ +

Parfois, nous souhaitons être au courant de l’état de la situation lorsque +nous effectuons une réécriture. Par exemple, vous voudriez prendre note +que vous avez effectué cette réécriture, de sorte que vous pourriez +ultérieurement voir si une requête est arrivée par l’intermédaire de cette +réécriture. Une solution pour y parvenir est la définition d’une variable +d’environnement.

+ + +RewriteEngine on +RewriteRule "^/horse/(.*)" "/pony/$1" [E=rewritten:1] + + +

Dans la suite de votre jeu de règles, vous pouvez consulter cette variable +d’environnement en utilisant une RewriteCond :

+ + +RewriteCond "%{ENV:rewritten}" =1 + + +

Notez que les variables d’environnements ne survivent pas à une redirection +externe. Vous devez alors utiliser le drapeau [CO] pour définir un cookie.

+ + Préfixe REDIRECT_ après une redirection interne +

Dans un contexte de répertoire, + une substitution réussie déclenche une redirection interne. Lorsque cela se + produit, toutes les variables d’environnement définies au cours de la passe + précédente — y compris celles créées avec [E=VAR:VAL] — sont + renommées par l’ajout du préfixe REDIRECT_. Une variable que + vous avez nommée rewritten devient ainsi + REDIRECT_rewritten dans la requête redirigée.

+ +

Pour tester la variable renommée, référencez-la avec le préfixe :

+
+ + +RewriteRule "^/horses/(.*)" "/ponies/$1" [E=rewritten:1] + +# À la passe suivante, la variable a été renommée : +RewriteCond "%{ENV:REDIRECT_rewritten}" =1 +RewriteRule "^/ponies/(.*)" "-" [E=seen_redirect:1,L] + + +

Si la requête est redirigée plusieurs fois, le préfixe est empilé : + REDIRECT_REDIRECT_rewritten, et ainsi de suite. Voir Variables REDIRECT_ pour la description + complète de ce mécanisme.

+
END

L'utilisation du drapeau [END] permet non seulement de terminer le processus de réécriture en cours (comme [L]), mais aussi d'empêcher tout -processus de réécriture ultérieur dans un contexte de répertoire -(htaccess).

+processus de réécriture ultérieur dans un contexte +de répertoire, ce qui en fait le drapeau préféré pour la plupart des +règles de niveau répertoire.

+ +

Dans un contexte de serveur virtuel ou global, [END] et [L] se comportent de +manière identique. La différence entre les deux se situe dans un contexte de +répertoire où [L] interrompt la passe actuelle, mais où le jeu de règles est à +nouveau appliqué à l’URL réécrit. Cela peut provoquer des boucles infinies. +[END] empêche tout processus de réécriture ultérieur en interrompant le cycle.

+ + +# Dans .htaccess : routage de toutes les requêtes vers un contrôleur frontal +# ici, [L] proquerait une boucle infine, pas [END] +RewriteCond "%{REQUEST_FILENAME}" !-f +RewriteCond "%{REQUEST_FILENAME}" !-d +RewriteRule "^(.*)$" "/index.php" [END] +

Ceci ne s'applique pas aux nouvelles requêtes résultant d'une redirection externe.

+ +

Voir la discussion Réécritures dans un contexte +de répertoire pour une explication détaillée de la raison pour laquelle [L] +se comporte différemment dans un contexte de répertoire, et des cas où [END] +constitue le bon choix.

+
F|forbidden @@ -400,9 +647,9 @@ Forbidden.

RewriteRule "\.exe" "-" [F] -

Cet exemple utilise la syntaxe "-" pour la cible de réécriture, ce -qui signifie que l'URI de la requête n'est pas modifié. Il n'y a aucune -raison de réécrire un URI, si vous avez l'intention d'interdire la +

Cet exemple utilise la syntaxe "-" pour la cible de réécriture, ce qui +signifie que le chemin d’URL de la requête n'est pas modifié. Il n'y a aucune +raison de réécrire un chemin d’URL, si vous avez l'intention d'interdire la requête.

Lorsqu'on utilise [F], [L] est implicite - c'est à dire que la @@ -468,34 +715,13 @@ traitée. Ce drapeau correspond à la commande Perl last, ou que la règle courante doit être appliquée immédiatement, sans tenir compte des règles ultérieures.

-

Si vous utilisez des règles RewriteRule dans des fichiers -.htaccess ou des sections Directory, il est important d'avoir quelques -notions sur la manière dont les règles sont traitées. Pour simplifier, -une fois les règles traitées, la requête réécrite est passée à nouveau -au moteur d'interprétation des URLs afin que ce dernier puisse la -traiter. Il est possible qu'au cours du traitement de la requête -réécrite, le fichier .htaccess ou la section Directory soient à nouveau -rencontrés, entraînant un nouveau traitement du jeu de règles depuis le -début. Cette situation se présente le plus souvent lorsqu'une des règles -provoque une redirection - interne ou externe - ce qui réinitialise le -traitement de la requête.

- -

Si vous utilisez des directives RewriteRule dans un de ces contextes, -il importe par conséquent de prévoir explicitement des étapes permettant -d'éviter un bouclage infini sur les règles, -et de ne pas compter seulement sur -le drapeau [L] pour terminer l'exécution d'une série de règles, comme -décrit ci-dessous.

- -

Un autre drapeau, [END], permet non seulement d'interrompre le cycle -courant du processus de réécriture, mais aussi d'empêcher toute -réécriture ultérieure dans le contexte de répertoire (htaccess). Ceci ne -s'applique pas aux nouvelles requêtes résultant de redirections -externes.

+

Dans un contexte de répertoire, [L] +arrête la passe actuelle du jeu de règles, mais la requête réécrite peut être +traitée à nouveau depuis le début du jeu de règles — ce qui peut provoquer des +boucles infinies. Pour éviter ce problème, utilisez le drapeau [END], ou consultez le document Réécritures au niveau répertoire pour une +description détaillée du problème et des solutions alternatives.

Dans l'exemple donné ici, toute requête est réécrite en index.php, la requête originale étant ajoutée comme chaîne @@ -530,7 +756,7 @@ ceci jusqu'il n'y ait plus de A à remplacer.

Vous pouvez vous représenter ce traitement comme une boucle while : tant que le modèle de la règle correspond (c'est à -dire, tant que l'URI contient un A), +dire, tant que le chemin d’URL contient un A), effectuer la substitution (c'est à dire, remplacer le A par un B).

@@ -550,7 +776,7 @@ RewriteRule "(.+)[><;]$" "$1" [N=10]

Avec le drapeau [NC], le modèle de la règle RewriteRule est comparé à la requête de manière insensible à la casse. C'est à dire que cette comparaison -s'effectue sans tenir compte des majuscules/minuscules dans l'URI +s'effectue sans tenir compte des majuscules/minuscules dans le chemin URL comparé.

Dans l'exemple suivant, toute requête pour un fichier image sera @@ -591,6 +817,10 @@ aurait été converti en son équivalent hexadécimal, %23, ce qui aurait provoqué un code d'erreur "404 Not Found".

+

Voir Encodage et décodage des URLs pour une +description complète de la manière dont httpd encode et décode les URLs lors de +la réécriture.

+
NS|nosubreq @@ -618,6 +848,15 @@ Les images, scripts java, ou fichiers css, chargés en tant que partie d'une page html, ne sont pas des sous-requêtes - le navigateur les appelle sous forme de requêtes HTTP à part entière.

+ + +# Ne réécrire que les requêtes directes vers le contrôleur frontal, pas les +# sous-requêtes des inclusions SSI ou de mod_dir. +RewriteCond "%{REQUEST_FILENAME}" !-f +RewriteCond "%{REQUEST_FILENAME}" !-d +RewriteRule "^(.*)$" "/app/index.php?page=$1" [NS,L] + +
P|proxy @@ -634,7 +873,7 @@ autrement dit, la requête est immédiatement envoyée au mandataire, et toute règle ultérieure sera ignorée.

-Vous devez vous assurer que la chaîne de substitution soit un URI valide +Vous devez vous assurer que la chaîne de substitution soit un URL valide (commençant typiquement par http://nom-serveur) qui puisse être traitée par le module mod_proxy. Dans le cas contraire, le module mandataire vous renverra une erreur. @@ -645,12 +884,17 @@ local.

Avertissement à propos de la sécurité -

Lors de la construction de l'URL cible de la règle, il convient - de prendre en compte l'impact en matière de sécurité qu'aura le - fait de permettre au client d'influencer le jeu d'URLs pour - lesquelles votre serveur agira en tant que mandataire. - Assurez-vous que la partie protocole://nom-serveur de l'URL soit - fixe, ou ne permette pas au client de l'influencer induement.

+

Lors de la construction de l'URL cible de la règle, il convient de + prendre en compte l'impact en matière de sécurité qu'aura le fait de + permettre au client d'influencer le jeu d'URLs pour lesquelles votre + serveur agira en tant que mandataire. Si une partie de l’URL cible est + dérivée de l’entrée de l’utilisateur (références arrières, chaînes de + paramètres, etc.), un attaquant pourra être capable de faire que votre + serveur génère des requêtes vers des hôtes internes ou externes + arbitraires. Cette vulnérabilité est connue sous le nom de falsification + de requête côté serveur (Server-Side Request Forgery — SSRF). Assurez-vous + que la partie protocole://nom-serveur de l'URL soit fixe, ou ne permette + pas au client de l'influencer indument.

@@ -680,7 +924,7 @@ utiliser ce drapeau.

Par défaut, la cible (ou chaîne de substitution) d'une règle RewriteRule est sensée être un chemin de fichier. Avec le drapeau [PT], -par contre, elle est traitée comme un URI. Autrement dit, avec le +par contre, elle est traitée comme un chemin URL. Autrement dit, avec le drapeau [PT], le résultat de la règle RewriteRule est passé à nouveau au système de mise en correspondance des URLs avec le système de fichiers, @@ -724,7 +968,7 @@ réécrire vers -.

QSA|qsappend

-Quand l'URI de remplacement contient une chaîne de requête, le +Quand l'URL de remplacement contient une chaîne de requête, le comportement par défaut de la règle RewriteRule est de supprimer la query string (il s'agit des paramètres éventuellement passés dans l'URL après le @@ -747,10 +991,10 @@ autrement dit, la chaîne de requête (query string) existante sera

QSD|qsdiscard

-Lorsque l'URI de la requête contient une chaîne de paramètres, et si +Lorsque l'URL de la requête contient une chaîne de paramètres, et si l'URI cible n'en contient pas, le comportement par défaut de la directive RewriteRule consiste à copier cette -chaîne de paramètres dans l'URI cible. Avec le drapeau [QSD], la chaîne +chaîne de paramètres dans l'URL cible. Avec le drapeau [QSD], la chaîne de paramètres est supprimée.

@@ -762,12 +1006,19 @@ drapeau [QSD] qui l'emporte.

-Si l'URI cible possède une chaîne de paramètres, le comportement par +Si l'URL cible possède une chaîne de paramètres, le comportement par défaut sera respecté - c'est à dire que la chaîne de paramètres originale sera supprimée et remplacée par la chaîne de paramètres de -l'URI cible. +l'URL cible.

+ +# Redirection des anciens URLs « search » vers le nouveau chemin en supprimant +# la chaîne de paramètres. /search?q=term&page=2 devient /find (chaîne de +# paramètres supprimée) +RewriteRule "^/search" "/find" [QSD,R=301,L] + +
QSL|qslast @@ -783,6 +1034,21 @@ points d'interrogation. Si aucune chaîne de paramètre n'est présente dans la substitution, il est alors possible d'ajouter un point d'interrogation à la fin et d'utiliser ce drapeau.

+

Par exemple, si une application patrimoniale attend une chaîne de paramètres +qui contient elle-même un point d’interrogation :

+ + +# Associe /lookup/foo?bar à /app?type=foo?bar +# Sans [QSL], le premier ? dans la substitution couperait le chemin, en +# produisant incorrectement /app avec la chaîne de paramètres type=foo?bar. +# Avec [QSL], le DERNIER ? est utilisé comme délimiteur. +RewriteRule "^/lookup/(.*)" "/app?type=$1" [QSL,PT] + + +

Sans [QSL], la substitution /app?type=foo?bar serait coupée au +premier ?, perdant de ce fait le point d’interrogation littéral de +la valeur.

+

Ce drapeau est disponible à partir de la version 2.4.19 du serveur HTTP Apache.

@@ -814,7 +1080,7 @@ codes de redirection en utilisant leurs noms symboliques :

Vous utiliserez presque toujours [R] en conjonction avec [L] (c'est à -dire [R,L]), car employé seul, le drapeau [R] préfixe l'URI avec +dire [R,L]), car employé seul, le drapeau [R] préfixe le chemin URL avec http://cet-hôte[:ce-port], mais passe ensuite cette adresse à la règle suivante, ce qui provoquera le plus souvent des avertissements 'Invalid URI in request'. @@ -824,21 +1090,35 @@ avertissements 'Invalid URI in request'. spécification de HTTP. Utiliser un code d'état non reconnu provoquera une erreur 500 et l'enregistrement d'un message dans le journal des erreurs.

+[R=4xx] ne sert pas la substitution +

Lorsqu’un code d’état en dehors de l’intervalle 300-399 est spécifié (par +exemple [R=403] ou [R=410]), la chaîne de substitution +est ignorée. L’URL que vous avez saisi comme cible n’est pas servi au client. À +la place, httpd renvoie le code d’état spécifié et le traite de la manière +habituelle pour les réponses d'erreur (entre autres tout ErrorDocument configuré). Si vous souhaitez interdire +l’accès, les drapeaux [F] et [G] +sont des solutions plus adaptées pour exprimer la même intention.

+
+ + +# Redirection des requêtes pour l’ancien chemin de la documentation vers le +# nouvel emplacement. +RewriteRule "^/docs/(.*)$" "http://docs.example.com/$1" [R=301,L] + +
S|skip -

Le drapeau [S] sert à sauter des règles que vous ne voulez pas voir -exécuter. La syntaxe du drapeau [S] est [S=N], où -N correspond au nombre de règles à sauter (sous -réserve que la règle RewriteRule corresponde et qu'au moins -une condition RewriteCond -préalable soit vérifiée). -Ceci peut s'interpréter comme une instruction -goto dans votre jeu de règles de réécriture. Dans -l'exemple suivant, nous ne voulons exécuter la règle RewriteRule que si l'URI demandé ne -correspond pas à un fichier existant.

+

Le drapeau [S] sert à sauter des règles que vous ne voulez pas voir exécuter. +La syntaxe du drapeau [S] est [S=N], où N correspond au nombre +de règles à sauter (sous réserve que la règle RewriteRule corresponde et qu'au moins une +condition RewriteCond préalable soit +vérifiée). Ceci peut s'interpréter comme une instruction goto +dans votre jeu de règles de réécriture. Dans l'exemple suivant, nous ne voulons +exécuter la règle RewriteRule que si +le chemin URL demandé ne correspond pas à un fichier existant.

# La requête concerne-t-elle un fichier qui n'existe pas ? RewriteCond "%{REQUEST_FILENAME}" !-f @@ -850,8 +1130,6 @@ RewriteRule "(.*\.gif)" "images.php?$1" RewriteRule "(.*\.html)" "docs.php?$1" - -

Cette technique trouve son utilité dans le fait qu'une directive RewriteCond ne s'applique qu'à la règle qui la suit immédiatement. Ainsi, si vous voulez @@ -929,20 +1207,64 @@ utiliser le drapeau L pour terminer la séquence

UnsafeAllow3F

Il est nécessaire de définir ce drapeau pour permettre à une réécriture - de continuer si la requête HTTP en cours d'écriture possède un point d'interrogation encodé, « %3f Â», et si le résultat réécrit contient un « ? Â» dans - la substitution. Cela protège d'une URL malveillante tirant avantage d'une - capture et d'une resubstitution du point d'interrogation encodé.

+ de continuer si la requête HTTP en cours d'écriture possède un point + d'interrogation encodé, « %3f Â», et si le résultat réécrit + contient un « ? Â» dans la substitution. Cela protège d'une URL + malveillante tirant avantage d'une capture et d'une resubstitution du point + d'interrogation encodé.

+ + +# Un contrôleur frontal PHP qui route toutes les requêtes via un élément de la +# chaîne de paramètres. +# Sans UnsafeAllow3F, une requête comme /page%3Fname=test renverrait 403 Forbidden, +# car le substitution réécrite contient '?' alors que la requête originelle +# contient un caractère encodé '%3F'. +RewriteCond "%{REQUEST_FILENAME}" !-f +RewriteCond "%{REQUEST_FILENAME}" !-d +RewriteRule "(.+)" "index.php?route=$1" [L,QSA,UnsafeAllow3F] + + + +L’existence de ce drapeau est due à CVE-2024-38474. Ne +l’utilisez que dans les règles pour lesquelles vous êtes certain qu’un +%3F saisi par l’utilisateur dans la requête ne peut pas être +exploité pour manipuler la chaîne de paramètres de la cible de substitution. +Préférez autant que possible la restructuration des URLs pour éviter les points +d’interrogation encodés. + +
UnsafePrefixStat

La définition de ce drapeau est requise dans les substitutions à l'échelle du serveur qui commencent par une variable ou une référence arrière et se résolvent en un chemin du système de fichiers. Ces substitutions ne sont pas préfixées par la racine des documents. Cela protège - d'une URL malveillante faisant correspondre la substitution expansée à un + d'un URL malveillant faisant correspondre la substitution développée à un emplacement non souhaité du système de fichiers.

2.5.1

-
+ + +# Cette règle lance la substitution avec une référence arrière. +# Depuis la version 2.4.60, cette opération est rejetée par défaut pour empêcher +# le chemin développé de s’échapper de la racine des documents (CVE-2024-38475). +# N’ajoutez UnsafePrefixStat qu’après avoir vérifié que la substitution ne peut +# pas se résoudre en un chemin du système de fichiers en dehors de la racine des +# documents de votre site. +RewriteRule "^/mirror/(.+)$" "$1" [PT,UnsafePrefixStat] + + + +L’existence de ce drapeau est due à CVE-2024-38475. Sans +lui, une substitution commençant par une référence arrière ou une variable qui +correspond à un chemin existant du système de fichiers pourrait permettre à des +requêtes de s’échapper de la racine des documents. N’utilisez ce drapeau +qu’après avoir confirmé que la substitution est contrainte de manière adéquate. + + +
UNC

Définir ce drapeau empêche la fusion des slashes de début multiples tels @@ -951,6 +1273,22 @@ utiliser le drapeau L pour terminer la séquence multiples littéraux.

2.5.1

+ + +# Sous Windows, réécriture vers un partage de fichiers UNC +# en utilisant une variable +# Sans [UNC], les barres obliques de tête dans la substitution seraient +# fusionnées (//server/share deviendrait /server/share). +RewriteCond "%{HTTP_HOST}" "^(.+)\.internal$" +RewriteRule "^/shared/(.*)$" "//%1/fileshare/$1" [UNC] + + +

Ce drapeau n’est pertinent que sous Windows. Il empêche httpd de fusionner +les doubles barres obliques de tête (//) qui sont présentes dans un +chemin UNC lorsque ce dernier a été construit à partir d’une référence arrière +ou d’une variable. Si la substitution commence par des doubles barres obliques +littérales, aucun drapeau n’est nécessaire.

+