Serveur Apache HTTP Version 2.4
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 ap_expr, pour toutes les directives de configuration. Ce document d�crit l'interpr�teur d'expressions ap_expr.
Le type d'expression ap_expr est appel� � remplacer la
plupart des autres types d'expressions dans HTTPD. Par exemple, la
directive obsol�te SSLRequire
peut �tre remplac�e par la
directive Require
expr.
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 expr
.
Cependant, certaines directives comme LogMessage
utilisent comme
param�tres des expressions qui repr�sentent des cha�nes de
caract�res. Dans ce cas, le point de d�part de la BNF est
string
.
expr ::= "true" | "false" | "!" expr | expr "&&" expr | expr "||" expr | "(" expr ")" | comp comp ::= stringcomp | integercomp | unaryop word | word binaryop word | word "in" "{" wordlist "}" | word "in" listfunction | word "=~" regex | word "!~" regex stringcomp ::= word "==" word | word "!=" word | word "<" word | word "<=" word | word ">" word | word ">=" word integercomp ::= word "-eq" word | word "eq" word | word "-ne" word | word "ne" word | word "-lt" word | word "lt" word | word "-le" word | word "le" word | word "-gt" word | word "gt" word | word "-ge" word | word "ge" word wordlist ::= word | wordlist "," word word ::= word "." word | digit | "'" string "'" | """ string """ | variable | rebackref | function string ::= stringpart | string stringpart stringpart ::= cstring | variable | rebackref cstring ::= ... digit ::= [0-9]+ variable ::= "%{" varname "}" | "%{" funcname ":" funcargs "}" rebackref ::= "$" [0-9] function ::= funcname "(" word ")" listfunction ::= listfuncname "(" word ")"
L'interpr�teur d'expressions fournit plusieurs variables de la
forme %{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 <If >
sera �valu�e avant
la phase d'authentification. Par cons�quent, la variable
%{REMOTE_USER}
ne sera pas encore d�finie � ce stade.
Les variables suivantes contiennent la valeur de l'en-t�te de
requ�te HTTP correspondant. La fonction
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 |
---|
HTTP_ACCEPT |
HTTP_FORWARDED |
HTTP_HOST |
HTTP_PROXY_CONNECTION |
HTTP_REFERER |
HTTP_USER_AGENT |
Autres variables li�es aux requ�tes
Nom | Description |
---|---|
REQUEST_METHOD |
La m�thode HTTP de la requ�te entrante (par exemple
GET ) |
REQUEST_SCHEME |
Le protocole associ� � l'URI de la requ�te |
REQUEST_URI |
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 |
SCRIPT_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�.
|
SCRIPT_USER |
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
la directive AcceptPathInfo |
QUERY_STRING |
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 |
THE_REQUEST |
La requ�te compl�te (par exemple "GET /index.html
HTTP/1.1 ") |
REMOTE_ADDR |
L'adresse IP de l'h�te distant |
REMOTE_HOST |
Le nom d'h�te de l'h�te distant |
REMOTE_USER |
Le nom de l'utilisateur authentifi� (s'il existe) |
REMOTE_IDENT |
Le nom de l'utilisateur d�fini par mod_ident |
SERVER_NAME |
La valeur de la directive ServerName du serveur virtuel courant |
SERVER_PORT |
Le port associ� au serveur virtuel courant ; voir la
directive ServerName |
SERVER_ADMIN |
La valeur de la directive ServerAdmin du serveur virtuel courant |
SERVER_PROTOCOL |
Le protocole utilis� par la requ�te |
DOCUMENT_ROOT |
La valeur de la directive DocumentRoot du serveur virtuel
courant |
AUTH_TYPE |
La valeur de la directive AuthType (par exemple
"basic ") |
CONTENT_TYPE |
Le type de contenu de la r�ponse |
HANDLER |
Le nom du gestionnaire qui a g�n�r� la r�ponse |
HTTPS |
"on " si la requ�te utilise https,
"off " dans le cas contraire |
IPV6 |
"on " si la connexion utilise IPv6,
"off " dans le cas contraire |
REQUEST_STATUS |
Le code d'erreur HTTP de la requ�te |
REQUEST_LOG_ID |
L'identifiant du message d'erreur associ� � la requ�te (voir
la directive ErrorLogFormat ) |
CONN_LOG_ID |
L'identifiant du message d'erreur associ� � la connexion
(voir la directive ErrorLogFormat ) |
CONN_REMOTE_ADDR |
L'adresse IP du correspondant pour la connexion (voir le module
mod_remoteip ) |
Variables diverses
Nom | Description |
---|---|
TIME_YEAR |
L'ann�e courante (par exemple 2010 ) |
TIME_MON |
Le mois courant (1 , ..., 12 ) |
TIME_DAY |
Le jour courant dans le mois |
TIME_HOUR |
Les heures de la date courante (0 , ...,
23 ) |
TIME_MIN |
Les minutes de la date courante |
TIME_SEC |
Les secondes de la date courante |
TIME_WDAY |
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 |
API_VERSION |
La date de la version de l'API (module magic number) |
Certains modules, comme mod_ssl
, d�finissent des
variables suppl�mentaires.
� l'exception de quelques op�rateurs de comparaison internes, les
op�rateurs binaires sont de la forme
"-[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 |
!= |
In�galit� de cha�nes | |
< |
Cha�ne inf�rieure � | |
<= |
Cha�ne inf�rieure ou �gale � | |
> |
Cha�ne sup�rieure � | |
>= |
Cha�ne sup�rieure ou �gale � | |
-eq |
eq |
Egalit� d'entiers |
-ne |
ne |
In�galit� d'entiers |
-lt |
lt |
Entier inf�rieur � |
-le |
le |
Entier inf�rieur ou �gal � |
-gt |
gt |
Entier sup�rieur � |
-ge |
ge |
Entier sup�rieur ou �gal � |
Nom | Description |
---|---|
-ipmatch |
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 *, ?, []) |
-strcmatch |
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
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 |
-e |
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 |
-s |
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 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 |
-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 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 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 | |
-z |
Vrai si la cha�ne est vide | |
-T |
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
avec certains modules comme mod_include
.
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, voir ci-dessous | |
req_novary |
Identique � req , mais aucun nom d'en-t�te n'est
ajout� � l'en-t�te Vary | |
resp |
Lit l'en-t�te de r�ponse HTTP | |
reqenv |
Recherche une variable d'environnement de requ�te (on
peut aussi utiliser le raccourci v ). | |
osenv |
Recherche une variable d'environnement du syst�me d'exploitation | |
note |
Recherche une note de requ�te | |
env |
Renvoie le premier r�sultat positif de note ,
reqenv , osenv | |
tolower |
Convertit une cha�ne en minuscules | |
toupper |
Convertit une cha�ne en majuscules | |
escape |
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 | |
base64 |
Encode la cha�ne en base64 | |
unbase64 |
D�code les cha�nes cod�es en base64, renvoie une cha�ne tronqu�e si le caract�re 0x00 est rencontr� | |
md5 |
G�n�re un hash de la cha�ne en utilisant MD5, puis code le hash obtenu en hexad�cimal | |
sha1 |
G�n�re un hash de la cha�ne en utilisant SHA1, puis encode le hash obtenu en hexad�cimal | |
file |
Lit le contenu d'un fichier | 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 |
Les fonctions marqu�es comme "restreints" ne sont pas disponibles
avec certains modules comme mod_include
.
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 l'ajout de noms
d'en-t�tes � l'en-t�te Vary.
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.
Il n'existe pas de fonctions internes dont la valeur est une
liste. Le module mod_ssl
fournit la fonction
PeerExtList
. Voir la description de la directive
SSLRequire
pour plus de
d�tails (notez que la fonction PeerExtList
peut aussi
�tre utilis�e en dehors de la directive SSLRequire
).
Les exemples suivants montent comment utiliser les expressions pour �valuer les requ�tes :
# Comparer le nom d'h�te avec example.com et rediriger vers # www.example.com si le nom d'h�te correspond <If "%{HTTP_HOST} == 'example.com'"> Redirect permanent / http://www.example.com/ </If> # Forcer le type text/plain si un fichier fait l'objet d'une # requ�te dont la cha�ne de param�tres contient 'forcetext' <If "%{QUERY_STRING} =~ /forcetext/"> ForceType text/plain </If> # N'autoriser l'acc�s � ce contenu que pendant les heures de # travail <Directory "/foo/bar/business"> Require expr "%{TIME_HOUR} -gt 9 && %{TIME_HOUR} -lt 17" </Directory>
Nom | Alternative | Description |
---|---|---|
-in |
in |
cha�ne contenue dans une liste de cha�nes |
/regexp/ |
m#regexp# |
Expression rationnelle (la seconde forme permet de sp�cifier des d�limiteurs autres que /) |
/regexp/i |
m#regexp#i |
Expression rationnelle insensible � la casse |
$0 ... $9 |
R�f�rences arri�res dans les expressions rationnelles |
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 SSLRequire
. Vous pouvez consulter la
liste de leur diff�rences dans la documentation de la directive
SSLRequire
.
La fonction req_novary
est
disponible � partir de la version 2.4.4 du serveur HTTP Apache.