From: Lucien Gentis Historiquement, il existe de nombreuses variantes dans la syntaxe
des expressions permettant d'exprimer une condition dans les
- différents modules du serveur HTTP Apache. À ce titre, des travaux sont
- en cours pour n'utiliser qu'une seule variante nommée
+ différents modules du serveur HTTP Apache. à ce titre, des travaux sont
+ en cours pour n'utiliser qu'une seule variante nommée
ap_expr, pour toutes les directives de configuration. Ce
- document décrit l'interpréteur d'expressions ap_expr.
+ document décrit l'interpréteur d'expressions ap_expr.
Le type d'expression ap_expr est appelé à remplacer la
+ Le type d'expression ap_expr est appelé à remplacer la
plupart des autres types d'expressions dans HTTPD. Par exemple, la
- directive obsolète La Forme de Backus-Naur
- (souvent abrégée en BNF, de l'anglais Backus-Naur Form) est une notation permettant de décrire
- les règles syntaxiques des langages de programmation. En
- général, les expressions représentent des valeurs booléennes. Dans
- ce cas, le point de départ de la BNF est L'interpréteur d'expressions fournit plusieurs variables de la
+ L'interpréteur d'expressions fournit plusieurs variables de la
forme Les variables suivantes contiennent la valeur de l'en-tête de
- requête HTTP correspondant. La fonction
+ peut dépendre de la phase du traitement de la requête au cours de
+ laquelle elle est évaluée. Par exemple, une expression utilisée dans
+ une directive Les variables suivantes contiennent la valeur de l'en-tête de
+ requête HTTP correspondant. La fonction
Autres variables liées aux requêtes Autres variables liées aux requêtes Certains modules, comme Certains modules, comme À l'exception de quelques opérateurs de comparaison internes, les
- opérateurs binaires sont de la forme
+ à l'exception de quelques opérateurs de comparaison internes, les
+ opérateurs binaires sont de la forme
"expr
.
+ (souvent abrégée en BNF, de l'anglais Backus-Naur Form) est une notation permettant de décrire
+ les règles syntaxiques des langages de programmation. En
+ général, les expressions représentent des valeurs booléennes. Dans
+ ce cas, le point de départ de la BNF est expr
.
Cependant, certaines directives comme string
.
@@ -159,21 +159,21 @@ listfunction ::= listfuncname "(" word ")"
%{HTTP_HOST}
. Notez que la valeur d'une variable
- peut dépendre de la phase du traitement de la requête au cours de
- laquelle elle est évaluée. Par exemple, une expression utilisée dans
- une directive %{REMOTE_USER}
ne sera pas encore définie à ce stade.%{REMOTE_USER}
ne sera pas encore définie à ce stade.req
permet d'extraire les valeurs des autres
- en-têtes. L'utilisation de ces variables peut provoquer
- l'ajout du nom d'en-tête correspondant à l'en-tête Vary de la
- réponse HTTP, sauf spécification contraire pour la directive
- qui accepte l'expression comme paramètre. La function req_novary
permet de
modifier ce comportement.
- Nom Description
- REQUEST_METHOD
La méthode HTTP de la requête entrante (par exemple
+ La méthode HTTP de la requête entrante (par exemple
GET
)
+
- REQUEST_SCHEME
Le protocole associé à l'URI de la requête Le protocole associé à l'URI de la requête
+
- REQUEST_URI
La partie chemin de l'URI de la requête La partie chemin de l'URI de la requête
DOCUMENT_URI
Idem REQUEST_URI
+
- REQUEST_FILENAME
Le chemin complet dans le système de fichiers local du
- fichier ou du script correspondant à la requête, si le serveur
- l'a dèjà déterminé à l'instant où REQUEST_FILENAME
- est référencée. Dans le cas contraire, comme dans un
- contexte de serveur virtuel, même valeur que REQUEST_URI
Le chemin complet dans le système de fichiers local du
+ fichier ou du script correspondant à la requête, si le serveur
+ l'a dèjà déterminé à l'instant où
REQUEST_FILENAME
+ est référencée. Dans le cas contraire, comme dans un
+ contexte de serveur virtuel, même valeur que REQUEST_URI
+
- SCRIPT_FILENAME
Identique à REQUEST_FILENAME
Identique Ã
REQUEST_FILENAME
- LAST_MODIFIED
La date et heure de dernière modification du fichier au
- format 20101231235959
, si elle est déjà connue du
- serveur au moment où LAST_MODIFIED
est référencé.
+ La date et heure de dernière modification du fichier au
+ format 20101231235959
, si elle est déjà connue du
+ serveur au moment où LAST_MODIFIED
est référencé.
+
- SCRIPT_USER
Le nom d'utilisateur du propriétaire du script. Le nom d'utilisateur du propriétaire du script.
SCRIPT_GROUP
Le nom du groupe auquel appartient le script.
- PATH_INFO
L'information relative au nom de chemin située en fin, voir
+ L'information relative au nom de chemin située en fin, voir
la directive
+
- QUERY_STRING
La chaîne de paramètres de la requête courante La chaîne de paramètres de la requête courante
+
- IS_SUBREQ
" true
" si la requête courante est une
- sous-requête, "false
" dans le cas contraire"
true
" si la requête courante est une
+ sous-requête, "false
" dans le cas contraire
- THE_REQUEST
La requête complète (par exemple " GET /index.html
+
La requête complète (par exemple " GET /index.html
HTTP/1.1
")
+
- REMOTE_ADDR
L'adresse IP de l'hôte distant L'adresse IP de l'hôte distant
+
- REMOTE_HOST
Le nom d'hôte de l'hôte distant Le nom d'hôte de l'hôte distant
+
- REMOTE_USER
Le nom de l'utilisateur authentifié, s'il existe (non
- disponible à l'intérieur d'un bloc Le nom de l'utilisateur authentifié, s'il existe (non
+ disponible à l'intérieur d'un bloc
+
- REMOTE_IDENT
Le nom de l'utilisateur défini par Le nom de l'utilisateur défini par
SERVER_NAME
La valeur de la directive
- SERVER_PORT
Le port associé au serveur virtuel courant ; voir la
+ Le port associé au serveur virtuel courant ; voir la
directive SERVER_ADMIN
La valeur de la directive
- SERVER_PROTOCOL
Le protocole utilisé par la requête (par
- exemple HTTP/1.1). Avec certains types de sous-requêtes
+ Le protocole utilisé par la requête (par
+ exemple HTTP/1.1). Avec certains types de sous-requêtes
internes, cette variable prend la valeur INCLUDED
.
- SERVER_PROTOCOL_VERSION
Un nombre qui représente la version HTTP de la requête :
+ Un nombre qui représente la version HTTP de la requête :
1000 * major + minor
. Par exemple,
- 1001
correspond à HTTP/1.1 et 9
à
+ 1001
correspond à HTTP/1.1 et 9
Ã
HTTP/0.9.
- SERVER_PROTOCOL_VERSION_MAJOR
La partie majeure de la version HTTP de la requête, par
+ La partie majeure de la version HTTP de la requête, par
exemple 1
pour HTTP/1.0.
- SERVER_PROTOCOL_VERSION_MINOR
La partie mineure de la version HTTP de la requête, par
+ La partie mineure de la version HTTP de la requête, par
exemple 0
pour HTTP/1.0.DOCUMENT_ROOT
La valeur de la directive basic
")
+
- CONTENT_TYPE
Le type de contenu de la réponse (non
- disponible à l'intérieur d'un bloc Le type de contenu de la réponse (non
+ disponible à l'intérieur d'un bloc
+ généré la réponse
HANDLER
Le nom du gestionnaire qui a
- généré la réponse
- HTTP2
" on
" si la requête utilise http/2,
+ " on
" si la requête utilise http/2,
"off
" dans le cas contraire
- HTTPS
" on
" si la requête utilise https,
+ " on
" si la requête utilise https,
"off
" dans le cas contraireIPV6
" on
" si la connexion utilise IPv6,
"off
" dans le cas contraire
+
- REQUEST_STATUS
Le code d'erreur HTTP de la requête (non
- disponible à l'intérieur d'un bloc Le code d'erreur HTTP de la requête (non
+ disponible à l'intérieur d'un bloc
- REQUEST_LOG_ID
L'identifiant du message d'erreur associé à la requête (voir
+ L'identifiant du message d'erreur associé à la requête (voir
la directive
- CONN_LOG_ID
L'identifiant du message d'erreur associé à la connexion
+ L'identifiant du message d'erreur associé à la connexion
(voir la directive
@@ -318,7 +318,7 @@ listfunction ::= listfuncname "(" word ")"
CONN_REMOTE_ADDR
Nom Description
+
- TIME_YEAR
L'année courante (par exemple 2010
)L'année courante (par exemple
2010
)TIME_MON
Le mois courant ( 1
, ..., 12
)
@@ -331,32 +331,32 @@ listfunction ::= listfuncname "(" word ")"
TIME_DAY
TIME_SEC
Les secondes de la date courante
- TIME_WDAY
Le jour de la semaine (à partir de 0
pour
+ Le jour de la semaine (Ã partir de 0
pour
dimanche)TIME
La date et heure au format 20101231235959
+
- SERVER_SOFTWARE
La chaîne contenant la version du serveur La chaîne contenant la version du serveur
API_VERSION
La date de la version de l'API (module magic number) -[a-zA-Z][a-zA-Z0-9_]+
", autrement dit un signe moins
- et au moins deux caractères. Le nom est insensible à la casse. Les
- modules peuvent fournir des opérateurs binaires supplémentaires.
Nom | Alternative | Description |
---|---|---|
== |
= |
- Egalité de chaînes | Egalité de chaînes |
!= |
- | Inégalité de chaînes | Inégalité de chaînes |
< |
- | Chaîne inférieure à | Chaîne inférieure à |
<= |
- | Chaîne inférieure ou égale à | Chaîne inférieure ou égale à |
> |
- | Chaîne supérieure à | Chaîne supérieure à |
>= |
- | Chaîne supérieure ou égale à | Chaîne supérieure ou égale à |
=~ |
- | La chaîne correspond à l'expression rationnelle | La chaîne correspond à l'expression rationnelle |
!~ |
- | La chaîne ne correspond pas à l'expression rationnelle | La chaîne ne correspond pas à l'expression rationnelle |
-eq |
eq |
- Egalité d'entiers | Egalité d'entiers |
-ne |
ne |
- Inégalité d'entiers | Inégalité d'entiers |
-lt |
lt |
- Entier inférieur à | Entier inférieur à |
-le |
le |
- Entier inférieur ou égal à | Entier inférieur ou égal à |
-gt |
gt |
- Entier supérieur à | Entier supérieur à |
-ge |
ge |
- Entier supérieur ou égal à | Entier supérieur ou égal à |
Nom | Description |
---|---|
-ipmatch |
- L'adresse IP correspond à adresse/masque | L'adresse IP correspond à adresse/masque |
-strmatch |
- la chaîne de gauche correspond au modèle constitué par la - chaîne de droite (contenant des caractères génériques *, ?, []) | la chaîne de gauche correspond au modèle constitué par la + chaîne de droite (contenant des caractères génériques *, ?, []) |
-strcmatch |
- idem -strmatch , mais insensible à la casse | idem -strmatch , mais insensible à la casse |
-fnmatch |
idem -strmatch , mais les slashes ne sont pas
- pris en compte par les caractères génériques |
Les opérateurs unaires acceptent un seul argument et sont +
Les opérateurs unaires acceptent un seul argument et sont
de la forme "-[a-zA-Z]
",
- autrement dit le signe moins et un caractère. Le nom est
- sensible à la casse. Les modules peuvent fournir des opérateurs
- unaires supplémentaires.
Nom | Description | Restreint | |
---|---|---|---|
-d |
- L'argument est traité comme un nom de fichier. - Vrai si le fichier existe et correspond à un - répertoire | oui | L'argument est traité comme un nom de fichier. + Vrai si le fichier existe et correspond à un + répertoire | oui |
-e |
- L'argument est traité comme un nom de fichier. Vrai si le + | L'argument est traité comme un nom de fichier. Vrai si le fichier (ou dir ou special) existe | oui |
-f |
- L'argument est traité comme un nom de fichier. Vrai si le - fichier existe et correspond à un fichier - régulier | oui | L'argument est traité comme un nom de fichier. Vrai si le + fichier existe et correspond à un fichier + régulier | oui |
-s |
- L'argument est traité comme un nom de fichier. Vrai si le + | L'argument est traité comme un nom de fichier. Vrai si le fichier existe et n'est pas vide | oui |
-L |
- L'argument est traité comme un nom de fichier. Vrai si le - fichier existe et correspond à un lien + | L'argument est traité comme un nom de fichier. Vrai si le + fichier existe et correspond à un lien symbolique | oui |
-h |
- L'argument est traité comme un nom de fichier. Vrai si le
- fichier existe et correspond à un lien symbolique
- (identique à -L ) | oui | L'argument est traité comme un nom de fichier. Vrai si le
+ fichier existe et correspond à un lien symbolique
+ (identique à -L ) | oui |
-F |
- Vrai si la chaîne correspond a un fichier valide, accessible - avec tous les contrôles d'accès configurés pour ce chemin. A - cette fin, une sous-requête effectue la vérification, et vous + | Vrai si la chaîne correspond a un fichier valide, accessible + avec tous les contrôles d'accès configurés pour ce chemin. A + cette fin, une sous-requête effectue la vérification, et vous devez utiliser ce drapeau avec soin car il peut impacter les performances de votre serveur ! | |
-U |
- Vrai si la chaîne correspond a une URL valide, accessible - avec tous les contrôles d'accès configurés pour ce chemin. A - cette fin, une sous-requête effectue la vérification, et vous + | Vrai si la chaîne correspond a une URL valide, accessible + avec tous les contrôles d'accès configurés pour ce chemin. A + cette fin, une sous-requête effectue la vérification, et vous devez utiliser ce drapeau avec soin car il peut impacter les performances de votre serveur ! | |
-A |
Alias pour -U | ||
-n |
- Vrai si la chaîne n'est pas vide | Vrai si la chaîne n'est pas vide | |
-z |
- Vrai si la chaîne est vide | Vrai si la chaîne est vide | |
-T |
- Faux si la chaîne est vide, "0 ",
+ | Faux si la chaîne est vide, "0 ",
"off ", "false ", ou "no "
- (insensibilité à la casse). Vrai dans le cas contraire. | |
-R |
Idem "%{REMOTE_ADDR} -ipmatch ... ", en plus
efficace
|
Les opérateurs marqués comme "restreints" ne sont pas disponibles +
Les opérateurs marqués comme "restreints" ne sont pas disponibles
avec certains modules comme
Normalement, les fonctions dont la valeur est une chaîne acceptent une chaîne - comme argument et renvoient une chaîne. Les noms de fonctions sont - insensibles à la casse. Les modules peuvent fournir des fonctions - supplémentaires.
+Normalement, les fonctions dont la valeur est une chaîne acceptent une chaîne + comme argument et renvoient une chaîne. Les noms de fonctions sont + insensibles à la casse. Les modules peuvent fournir des fonctions + supplémentaires.
Nom | Description | Restreint | |
---|---|---|---|
req , http |
- Lit l'en-tête de requête HTTP ; les noms - d'en-tête correspondants peuvent être ajoutés à l'en-tête Vary, + | Lit l'en-tête de requête HTTP ; les noms + d'en-tête correspondants peuvent être ajoutés à l'en-tête Vary, voir ci-dessous | |
req_novary |
- Identique à req , mais les noms
- d'en-tête correspondants ne seront pas ajoutés à l'en-tête Vary | Identique à req , mais les noms
+ d'en-tête correspondants ne seront pas ajoutés à l'en-tête Vary | |
resp |
- Lit l'en-tête de réponse HTTP (la plupart des
- en-tête de la réponse ne sont pas encore définis pendant
- l'exécution de la directive | Lit l'en-tête de réponse HTTP (la plupart des
+ en-tête de la réponse ne sont pas encore définis pendant
+ l'exécution de la directive | |
reqenv |
- Recherche une variable d'environnement de requête (on + | Recherche une variable d'environnement de requête (on
peut aussi utiliser le raccourci v ). | |
osenv |
- Recherche une variable d'environnement du système + | Recherche une variable d'environnement du système d'exploitation | |
note |
- Recherche une note de requête | Recherche une note de requête | |
env |
- Renvoie le premier résultat positif de note ,
+ | Renvoie le premier résultat positif de note ,
reqenv , osenv | |
tolower |
- Convertit une chaîne en minuscules | Convertit une chaîne en minuscules | |
toupper |
- Convertit une chaîne en majuscules | Convertit une chaîne en majuscules | |
escape |
- Echappe les caractères spéciaux en codage hexadécimal | Echappe les caractères spéciaux en codage hexadécimal | |
unescape |
- "Déséchappe" les chaînes codées - en hexadécimal, en ne gardant encodés que les slashes; renvoie la chaîne vide - si la séquence %00 est rencontrée | "Déséchappe" les chaînes codées + en hexadécimal, en ne gardant encodés que les slashes; renvoie la chaîne vide + si la séquence %00 est rencontrée | |
base64 |
- Encode la chaîne en utilisant le codage base64 | Encode la chaîne en utilisant le codage base64 | |
unbase64 |
- Décode une chaîne codée en base64, renvoie une chaîne - tronquée si le caractère 0x00 est rencontré | Décode une chaîne codée en base64, renvoie une chaîne + tronquée si le caractère 0x00 est rencontré | |
md5 |
- Effectue un hashage MD5 de la chaîne, puis encode le hash - avec un codage hexadécimal | Effectue un hashage MD5 de la chaîne, puis encode le hash + avec un codage hexadécimal | |
sha1 |
- Effectue un hashage SHA1 de la chaîne, puis encode le hash - avec un codage hexadécimal | Effectue un hashage SHA1 de la chaîne, puis encode le hash + avec un codage hexadécimal | |
file |
Lit le contenu d'un fichier (fins de lignes incluses, si elles existent) | oui | |
filemod |
- Renvoie la date de dernière modification d'un fichier (ou 0 + | Renvoie la date de dernière modification d'un fichier (ou 0 si le fichier n'existe pas ou n'est pas un fichier - régulier) | oui | oui |
filesize |
Renvoie la taille d'un fichier (ou 0 si le fichier n'existe - pas ou ne correspond pas à un fichier - régulier) | oui | oui |
ldap |
- Echappe les caractères selon la RFC4514 (Echappement des + | Echappe les caractères selon la RFC4514 (Echappement des noms distinctifs LDAP - DN) et la RFC4515 (Echappement des filtres LDAP). | |
replace |
- replace(chaîne, "de", "vers") remplace dans la chaîne - spécifiée toutes les occurrences de "de" par "vers". | replace(chaîne, "de", "vers") remplace dans la chaîne + spécifiée toutes les occurrences de "de" par "vers". |
Les fonctions marquées comme "restreints" ne sont pas disponibles +
Les fonctions marquées comme "restreints" ne sont pas disponibles
avec certains modules comme
Lorsque les fonctions req
ou http
sont
- utilisées, le nom d'en-tête sera automatiquement ajouté à l'en-tête
- Vary de la réponse HTTP, sauf spécification contraire pour la
- directive qui accepte l'expression comme paramètre. La fonction
- req_novary
permet d'empêcher cet ajout.
req_novary
permet d'empêcher cet ajout.
- En plus des fonctions dont la valeur est une chaîne, il existe +
En plus des fonctions dont la valeur est une chaîne, il existe
aussi des fonctions dont la valeur est une liste, qui acceptent une
- chaîne comme argument, et renvoient une liste de mots, autrement dit
- une liste de chaînes. La liste de mot peut être utilisée avec
- l'opérateur spécial -in
. Les noms de fonctions sont
- insensibles à la casse. Les modules peuvent fournir des fonctions
- supplémentaires.
-in
. Les noms de fonctions sont
+ insensibles à la casse. Les modules peuvent fournir des fonctions
+ supplémentaires.
Il n'existe pas de fonctions internes dont la valeur est une
liste. Le module PeerExtList
. Voir la description de la directive
PeerExtList
peut aussi
- être utilisée en dehors de la directive
Les exemples suivants montent comment utiliser les - expressions pour évaluer les requêtes :
+ expressions pour évaluer les requêtes :-in
in
/regexp/
m#regexp#
/regexp/i
m#regexp#i
$0 ... $9
Les chaînes $0
... $9
permettent de
- référencer les groupes de capture en provenance d'expressions
- rationnelles précédemment exécutées et mises en correspondance avec
- succès. Elles ne peuvent normalement être utilisées que dans la
- même expression que celle mise en correspondance, mais certains
- modules permettent de les utiliser de manière spéciale.
Les chaînes $0
... $9
permettent de
+ référencer les groupes de capture en provenance d'expressions
+ rationnelles précédemment exécutées et mises en correspondance avec
+ succès. Elles ne peuvent normalement être utilisées que dans la
+ même expression que celle mise en correspondance, mais certains
+ modules permettent de les utiliser de manière spéciale.
La syntaxe ap_expr consiste principalement en une
- surcouche de la syntaxe de la directive obsolète
La fonction req_novary
est
- disponible à partir de la version 2.4.4 du serveur HTTP Apache.
Les variables
SERVER_PROTOCOL_VERSION
,
SERVER_PROTOCOL_VERSION_MAJOR
et
- SERVER_PROTOCOL_VERSION_MINOR
sont disponibles à partir
+ SERVER_PROTOCOL_VERSION_MINOR
sont disponibles à partir
de la version 2.5.0 du serveur HTTP Apache.