<-
Apache > Serveur HTTP > Documentation > Version 2.4

Les expressions dans le serveur HTTP Apache

Langues Disponibles:  en  |  fr 

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.

Voir aussi

top

Syntaxe en Forme de Backus-Naur

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 ")"
top

Variables

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

NomDescription
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

NomDescription
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.

top

Op�rateurs binaires

� 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.

Op�rateurs de comparaison

NomAlternative 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 �

Autres op�rateurs binaires

NomDescription
-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
top

Op�rateurs unaires

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.

NomDescriptionRestreint
-d L'argument est trait� comme un nom de fichier. Vrai si le fichier existe et correspond � un r�pertoireoui
-e L'argument est trait� comme un nom de fichier. Vrai si le fichier (ou dir ou special) existeoui
-f L'argument est trait� comme un nom de fichier. Vrai si le fichier existe et correspond � un fichier r�gulieroui
-s L'argument est trait� comme un nom de fichier. Vrai si le fichier existe et n'est pas videoui
-L L'argument est trait� comme un nom de fichier. Vrai si le fichier existe et correspond � un lien symboliqueoui
-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.

top

Fonctions

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.

NomDescriptionRestreint
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 fichieroui
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).

top

Exemples d'expressions

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>
top

Autres

NomAlternative 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

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.

top

Comparaison avec SSLRequire

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.

top

Historique de version

La fonction req_novary est disponible � partir de la version 2.4.4 du serveur HTTP Apache.

Langues Disponibles:  en  |  fr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.