Ce module est implémenté dans le fichier mod_setenvif.c, et est compilé par défaut. Il permet de définir des variables d'environnement sur la base d'attributs de la requête.
Le module mod_setenvif vous permet de définir des variables d'environnement suivant différents aspects de la requête détectés au moyen d'expressions régulières. Ces variables d'environnement pourront être utilisées dans d'autres parties du serveur pour décider des actions à exécuter.
La directive BrowserMatch définit des variables d'environnement sur la base du contenu du champ d'en-tête HTTP User-Agent: de la requête. Le premier argument est une rexpression régulière POSIX.2 étendue (similaire à celles utilisées pour les fonctions de la famille egrep()). Le reste des arguments donne la liste des variables à définir, aisni que des valeurs optionnelles pour les initialiser. Les formes acceptées pour ces variables sont :
!nomVariable, ou
La première forme définit la variable et lui attribue une valeur initiale de "1". La seconde supprimera une variable déjà définie auparavent, la troisième définira la variable au besoin l'initialisera à la valeur mentionnée. Si le contenu d'un champ User-Agent: correspond à plusieurs directives, les variables d'environnement seront combinées, et seront crées ou modifiées en fonction de l'ordre dans lequel les directives qui les manipulent apparaissent dans les fichiers de configuration. Ainsi des directives postérieures peuvent surcharger l'action de directives antérieures.
Par exemple :
BrowserMatch ^Mozilla forms jpeg=yes browser=netscape
BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript
BrowserMatch MSIE !javascript
Notez que lexpression régulière est appliquée en tenant compte de la casse. Pour un test sans casse, voir la directive BrowserMatchNoCase.
Les directives BrowserMatch et BrowserMatchNoCase sont des cas particuliers des directives SetEnvIf et SetEnvIfNoCase. Les deux lignes suivantes ont exactement le même effet :
BrowserMatchNoCase Robot is_a_robot
SetEnvIfNoCase User-Agent Robot is_a_robot
La directive BrowserMatchNoCase est sémantiquement identique à la directive BrowserMatch. Elle applique cependant l'expression régulière sans tenir compte de la casse. Par exemple :
BrowserMatchNoCase mac platform=macintosh
BrowserMatchNoCase win platform=windows
Les directives BrowserMatch et BrowserMatchNoCase sont des cas particuliers des directives SetEnvIf et SetEnvIfNoCase. Les deux lignes suivantes ont le même effet :
BrowserMatchNoCase Robot is_a_robot
SetEnvIfNoCase User-Agent Robot is_a_robot
La directive SetEnvIf permet de définir plus généralement des variables d'environnement sur des attributs de la requête. Ces attributs peuvent être les valeurs de divers champs d'en-tête HTTP de la requête (voir RFC2068 pour plus d'informations sur ces champs ; vous pouvez aussi consulter la version française de la RFC1945), ou encore d'autres aspects de la requête, parmi lesquels :
Remote_Host - le nom d'hôte de l'émetteur (si disponible)
Remote_Addr - l'adresse IP du client émetteur
Remote_User - le nom d'utilisateur authentifié (si disponible)
Request_Method - la méthode utilisée dans la requête, à savoir, GET, POST, etc.)
Request_URI - la portion d'URL suivant le schema d'authentification et le nom de serveur
Parmi les champs d'en-tête HTTP, les plus couramment utilisés sont Host:, User-Agent:, et Referer:.
Exemple:
SetEnvIf Request_URI "\.(gif)|(jpg)|(xbm)$" object_is_image
SetEnvIf Referer www\.mondomaine\.com intra_site_referral
La première ligne définit la variable d'environnement object_is_image si la requête portait sur un fichier graphique, et la seconde une variable intra_site_referral si la page contenant le lien activé faisait partie de l'espace Intranet, dans le site www.mondomaine.com.
La directive SetEnvIfNoCase est sémantiquement identique à la directive SetEnvIf. Elle applique cependant l'expression régulière sans tenir compte de la casse.
Par exemple :
SetEnvIfNoCase Host Apache\.Org site=apache
Ceci définira la variable d'environnement site à la valeur apache si la requête HTTP contient un champ d'en-tête Host: contient Apache.Org, apache.org, ou toute autre mélange de casse haute et basse.
Adaptation française © Valery Fremaux / EISTI 1998