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.
    
 Syntaxe en Forme de Backus-Naur
 Variables
 Op�rateurs binaires
 Op�rateurs unaires
 Fonctions
 Exemples d'expressions
 Autres
 Comparaison avec SSLRequire
 Historique de versionIf<If><ElseIf><Else>AuthBasicFakeAuthFormLoginRequiredLocationAuthFormLoginSuccessLocationAuthFormLogoutLocationRewriteCondSetEnvIfExprHeaderRequestHeaderFilterProviderSSLRequireLogMessagemod_includeLa 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_COOKIE | 
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 (non
	disponible � l'int�rieur d'un bloc <If
	>) | 
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 (non
	disponible � l'int�rieur d'un bloc <If
	>) | 
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 (non
	disponible � l'int�rieur d'un bloc <If
	>) | 
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) | 
CONTEXT_PREFIX | 
        |
CONTEXT_DOCUMENT_ROOT | 
        
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.