1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> 4<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> 5<!-- 6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7 This file is generated from xml source: DO NOT EDIT 8 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 9 --> 10<title>Les expressions dans le serveur HTTP Apache - Serveur HTTP Apache Version 2.4</title> 11<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> 12<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> 13<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" /> 14<script src="./style/scripts/prettify.min.js" type="text/javascript"> 15</script> 16 17<link href="./images/favicon.ico" rel="shortcut icon" /></head> 18<body id="manual-page"><div id="page-header"> 19<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p> 20<p class="apache">Serveur HTTP Apache Version 2.4</p> 21<img alt="" src="./images/feather.png" /></div> 22<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div> 23<div id="path"> 24<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="./">Version 2.4</a></div><div id="page-content"><div id="preamble"><h1>Les expressions dans le serveur HTTP Apache</h1> 25<div class="toplang"> 26<p><span>Langues Disponibles: </span><a href="./en/expr.html" hreflang="en" rel="alternate" title="English"> en </a> | 27<a href="./fr/expr.html" title="Français"> fr </a></p> 28</div> 29 30 <p>Historiquement, il existe de nombreuses variantes dans la syntaxe 31 des expressions permettant d'exprimer une condition dans les 32 différents modules du serveur HTTP Apache. À ce titre, des travaux sont 33 en cours pour n'utiliser qu'une seule variante nommée 34 <em>ap_expr</em>, pour toutes les directives de configuration. Ce 35 document décrit l'interpréteur d'expressions <em>ap_expr</em>. 36 </p> 37 <p>Le type d'expression <em>ap_expr</em> est appelé à remplacer la 38 plupart des autres types d'expressions dans HTTPD. Par exemple, la 39 directive obsolète <code class="directive"><a href="./mod/mod_ssl.html#sslrequire">SSLRequire</a></code> peut être remplacée par la 40 directive <a href="mod/mod_authz_core.html#reqexpr">Require 41 expr</a>. 42 </p> 43 </div> 44<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#grammar">Syntaxe en Forme de Backus-Naur</a></li> 45<li><img alt="" src="./images/down.gif" /> <a href="#vars">Variables</a></li> 46<li><img alt="" src="./images/down.gif" /> <a href="#binop">Opérateurs binaires</a></li> 47<li><img alt="" src="./images/down.gif" /> <a href="#unnop">Opérateurs unaires</a></li> 48<li><img alt="" src="./images/down.gif" /> <a href="#functions">Fonctions</a></li> 49<li><img alt="" src="./images/down.gif" /> <a href="#examples">Exemples d'expressions</a></li> 50<li><img alt="" src="./images/down.gif" /> <a href="#other">Autres</a></li> 51<li><img alt="" src="./images/down.gif" /> <a href="#sslrequire">Comparaison avec SSLRequire</a></li> 52<li><img alt="" src="./images/down.gif" /> <a href="#compatibility">Historique de version</a></li> 53</ul><h3>Voir aussi</h3><ul class="seealso"><li><code class="directive"><a href="./mod/core.html#if">If</a></code></li><li><code class="directive"><a href="./mod/core.html#if"><If></a></code></li><li><code class="directive"><a href="./mod/core.html#elseif"><ElseIf></a></code></li><li><code class="directive"><a href="./mod/core.html#else"><Else></a></code></li><li><code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#redirect">Redirect</a></code></li><li><code class="directive"><a href="./mod/mod_auth_basic.html#authbasicfake">AuthBasicFake</a></code></li><li><code class="directive"><a href="./mod/mod_auth_form.html#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code></li><li><code class="directive"><a href="./mod/mod_auth_form.html#authformloginsuccesslocation">AuthFormLoginSuccessLocation</a></code></li><li><code class="directive"><a href="./mod/mod_auth_form.html#authformlogoutlocation">AuthFormLogoutLocation</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvifexpr">SetEnvIfExpr</a></code></li><li><code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code></li><li><code class="directive"><a href="./mod/mod_headers.html#requestheader">RequestHeader</a></code></li><li><code class="directive"><a href="./mod/mod_filter.html#filterprovider">FilterProvider</a></code></li><li><a href="mod/mod_authz_core.html#reqexpr">Require expr</a></li><li><a href="mod/mod_authnz_ldap.html#requser">Require ldap-user</a></li><li><a href="mod/mod_authnz_ldap.html#reqgroup">Require ldap-group</a></li><li><a href="mod/mod_authnz_ldap.html#reqdn">Require ldap-dn</a></li><li><a href="mod/mod_authnz_ldap.html#reqattribute">Require ldap-attribute</a></li><li><a href="mod/mod_authnz_ldap.html#reqfilter">Require ldap-filter</a></li><li><a href="mod/mod_authz_dbd.html#reqgroup">Require dbd-group</a></li><li><a href="mod/mod_authz_dbm.html#reqgroup">Require dbm-group</a></li><li><a href="mod/mod_authz_groupfile.html#reqgroup">Require group</a></li><li><a href="mod/mod_authz_host.html#reqhost">Require host</a></li><li><code class="directive"><a href="./mod/mod_ssl.html#sslrequire">SSLRequire</a></code></li><li><code class="directive"><a href="./mod/mod_log_debug.html#logmessage">LogMessage</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li><li><a href="#comments_section">Commentaires</a></li></ul></div> 54<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> 55<div class="section"> 56<h2><a name="grammar" id="grammar">Syntaxe en Forme de Backus-Naur</a></h2> 57 58 <p>La <a href="http://fr.wikipedia.org/wiki/Forme_de_Backus-Naur">Forme de Backus-Naur</a> 59 (souvent abrégée en BNF, de l'anglais Backus-Naur Form) est une notation permettant de décrire 60 les règles syntaxiques des langages de programmation. En 61 général, les expressions représentent des valeurs booléennes. Dans 62 ce cas, le point de départ de la BNF est <code>expr</code>. 63 Cependant, certaines directives comme <code class="directive"><a href="./mod/mod_log_debug.html#logmessage">LogMessage</a></code> utilisent comme 64 paramètres des expressions qui représentent des chaînes de 65 caractères. Dans ce cas, le point de départ de la BNF est 66 <code>string</code>. 67 </p> 68<blockquote> 69<pre>expr ::= "<strong>true</strong>" | "<strong>false</strong>" 70 | "<strong>!</strong>" expr 71 | expr "<strong>&&</strong>" expr 72 | expr "<strong>||</strong>" expr 73 | "<strong>(</strong>" expr "<strong>)</strong>" 74 | comp 75 76comp ::= stringcomp 77 | integercomp 78 | unaryop word 79 | word binaryop word 80 | word "<strong>in</strong>" "<strong>{</strong>" wordlist "<strong>}</strong>" 81 | word "<strong>in</strong>" listfunction 82 | word "<strong>=~</strong>" regex 83 | word "<strong>!~</strong>" regex 84 85 86stringcomp ::= word "<strong>==</strong>" word 87 | word "<strong>!=</strong>" word 88 | word "<strong><</strong>" word 89 | word "<strong><=</strong>" word 90 | word "<strong>></strong>" word 91 | word "<strong>>=</strong>" word 92 93integercomp ::= word "<strong>-eq</strong>" word | word "<strong>eq</strong>" word 94 | word "<strong>-ne</strong>" word | word "<strong>ne</strong>" word 95 | word "<strong>-lt</strong>" word | word "<strong>lt</strong>" word 96 | word "<strong>-le</strong>" word | word "<strong>le</strong>" word 97 | word "<strong>-gt</strong>" word | word "<strong>gt</strong>" word 98 | word "<strong>-ge</strong>" word | word "<strong>ge</strong>" word 99 100wordlist ::= word 101 | wordlist "<strong>,</strong>" word 102 103word ::= word "<strong>.</strong>" word 104 | digit 105 | "<strong>'</strong>" string "<strong>'</strong>" 106 | "<strong>"</strong>" string "<strong>"</strong>" 107 | variable 108 | rebackref 109 | function 110 111string ::= stringpart 112 | string stringpart 113 114stringpart ::= cstring 115 | variable 116 | rebackref 117 118cstring ::= ... 119digit ::= [0-9]+ 120 121variable ::= "<strong>%{</strong>" varname "<strong>}</strong>" 122 | "<strong>%{</strong>" funcname "<strong>:</strong>" funcargs "<strong>}</strong>" 123 124rebackref ::= "<strong>$</strong>" [0-9] 125 126function ::= funcname "<strong>(</strong>" word "<strong>)</strong>" 127 128listfunction ::= listfuncname "<strong>(</strong>" word "<strong>)</strong>"</pre> 129</blockquote> 130 131</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> 132<div class="section"> 133<h2><a name="vars" id="vars">Variables</a></h2> 134 135 136 <p>L'interpréteur d'expressions fournit plusieurs variables de la 137 forme <code>%{HTTP_HOST}</code>. Notez que la valeur d'une variable 138 peut dépendre de la phase du traitement de la requête au cours de 139 laquelle elle est évaluée. Par exemple, une expression utilisée dans 140 une directive <code class="directive"><If ></code> sera évaluée avant 141 la phase d'authentification. Par conséquent, la variable 142 <code>%{REMOTE_USER}</code> ne sera pas encore définie à ce stade.</p> 143 144 <p>Les variables suivantes contiennent la valeur de l'en-tête de 145 requête HTTP correspondant. La <a href="#functions">fonction</a> 146 <code>req</code> permet d'extraire les valeurs des autres 147 en-têtes. L'utilisation de ces variables peut provoquer 148 l'ajout du nom d'en-tête correspondant à l'en-tête Vary de la 149 réponse HTTP, sauf spécification contraire pour la directive 150 qui accepte l'expression comme paramètre. La <a href="#functions">function</a> <code>req_novary</code> permet de 151 modifier ce comportement.</p> 152 153 <table class="bordered"><tr class="header"><th>Nom</th></tr> 154<tr><td><code>HTTP_ACCEPT</code></td></tr> 155<tr class="odd"><td><code>HTTP_COOKIE</code></td></tr> 156<tr><td><code>HTTP_FORWARDED</code></td></tr> 157<tr class="odd"><td><code>HTTP_HOST</code></td></tr> 158<tr><td><code>HTTP_PROXY_CONNECTION</code></td></tr> 159<tr class="odd"><td><code>HTTP_REFERER</code></td></tr> 160<tr><td><code>HTTP_USER_AGENT</code></td></tr> 161</table> 162 163 <p>Autres variables liées aux requêtes</p> 164 165 <table class="bordered"><tr class="header"><th>Nom</th><th>Description</th></tr> 166<tr><td><code>REQUEST_METHOD</code></td> 167 <td>La méthode HTTP de la requête entrante (par exemple 168 <code>GET</code>)</td></tr> 169<tr class="odd"><td><code>REQUEST_SCHEME</code></td> 170 <td>Le protocole associé à l'URI de la requête</td></tr> 171<tr><td><code>REQUEST_URI</code></td> 172 <td>La partie chemin de l'URI de la requête</td></tr> 173<tr class="odd"><td><code>DOCUMENT_URI</code></td> 174 <td>Idem <code>REQUEST_URI</code></td></tr> 175<tr><td><code>REQUEST_FILENAME</code></td> 176 <td>Le chemin complet dans le système de fichiers local du 177 fichier ou du script correspondant à la requête, si le serveur 178 l'a dèjà déterminé à l'instant où <code>REQUEST_FILENAME</code> 179 est référencée. Dans le cas contraire, comme dans un 180 contexte de serveur virtuel, même valeur que <code>REQUEST_URI</code> </td></tr> 181<tr class="odd"><td><code>SCRIPT_FILENAME</code></td> 182 <td>Identique à <code>REQUEST_FILENAME</code></td></tr> 183<tr><td><code>LAST_MODIFIED</code></td> 184 <td>La date et heure de dernière modification du fichier au 185 format <code>20101231235959</code>, si elle est déjà connue du 186 serveur au moment où <code>LAST_MODIFIED</code> est référencé. 187 </td></tr> 188<tr class="odd"><td><code>SCRIPT_USER</code></td> 189 <td>Le nom d'utilisateur du propriétaire du script.</td></tr> 190<tr><td><code>SCRIPT_GROUP</code></td> 191 <td>Le nom du groupe auquel appartient le script.</td></tr> 192<tr class="odd"><td><code>PATH_INFO</code></td> 193 <td>L'information relative au nom de chemin située en fin, voir 194 la directive <code class="directive"><a href="./mod/core.html#acceptpathinfo">AcceptPathInfo</a></code></td></tr> 195<tr><td><code>QUERY_STRING</code></td> 196 <td>La chaîne de paramètres de la requête courante</td></tr> 197<tr class="odd"><td><code>IS_SUBREQ</code></td> 198 <td>"<code>true</code>" si la requête courante est une 199 sous-requête, "<code>false</code>" dans le cas contraire</td></tr> 200<tr><td><code>THE_REQUEST</code></td> 201 <td>La requête complète (par exemple "<code>GET /index.html 202 HTTP/1.1</code>")</td></tr> 203<tr class="odd"><td><code>REMOTE_ADDR</code></td> 204 <td>L'adresse IP de l'hôte distant</td></tr> 205<tr><td><code>REMOTE_PORT</code></td> 206 <td>Le port de l'hôte distant (versions 2.4.26 et supérieures)</td></tr> 207<tr class="odd"><td><code>REMOTE_HOST</code></td> 208 <td>Le nom d'hôte de l'hôte distant</td></tr> 209<tr><td><code>REMOTE_USER</code></td> 210 <td>Le nom de l'utilisateur authentifié, s'il existe (non 211 disponible à l'intérieur d'un bloc <code class="directive"><If></code>)</td></tr> 212<tr class="odd"><td><code>REMOTE_IDENT</code></td> 213 <td>Le nom de l'utilisateur défini par <code class="module"><a href="./mod/mod_ident.html">mod_ident</a></code></td></tr> 214<tr><td><code>SERVER_NAME</code></td> 215 <td>La valeur de la directive <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code> du serveur virtuel courant</td></tr> 216<tr class="odd"><td><code>SERVER_PORT</code></td> 217 <td>Le port associé au serveur virtuel courant ; voir la 218 directive <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code></td></tr> 219<tr><td><code>SERVER_ADMIN</code></td> 220 <td>La valeur de la directive <code class="directive"><a href="./mod/core.html#serveradmin">ServerAdmin</a></code> du serveur virtuel courant</td></tr> 221<tr class="odd"><td><code>SERVER_PROTOCOL</code></td> 222 <td>Le protocole utilisé par la requête</td></tr> 223<tr><td><code>DOCUMENT_ROOT</code></td> 224 <td>La valeur de la directive <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> du serveur virtuel 225 courant</td></tr> 226<tr class="odd"><td><code>AUTH_TYPE</code></td> 227 <td>La valeur de la directive <code class="directive"><a href="./mod/mod_authn_core.html#authtype">AuthType</a></code> (par exemple 228 "<code>basic</code>")</td></tr> 229<tr><td><code>CONTENT_TYPE</code></td> 230 <td>Le type de contenu de la réponse (non 231 disponible à l'intérieur d'un bloc <code class="directive"><If></code>)</td></tr> 232<tr class="odd"><td><code>HANDLER</code></td> 233 <td>Le nom du <a href="handler.html">gestionnaire</a> qui a 234 généré la réponse</td></tr> 235<tr><td><code>HTTP2</code></td> 236 <td>"<code>on</code>" si la requête utilise http/2, 237 "<code>off</code>" dans le cas contraire</td></tr> 238<tr class="odd"><td><code>HTTPS</code></td> 239 <td>"<code>on</code>" si la requête utilise https, 240 "<code>off</code>" dans le cas contraire</td></tr> 241<tr><td><code>IPV6</code></td> 242 <td>"<code>on</code>" si la connexion utilise IPv6, 243 "<code>off</code>" dans le cas contraire</td></tr> 244<tr class="odd"><td><code>REQUEST_STATUS</code></td> 245 <td>Le code d'erreur HTTP de la requête (non 246 disponible à l'intérieur d'un bloc <code class="directive"><If></code>)</td></tr> 247<tr><td><code>REQUEST_LOG_ID</code></td> 248 <td>L'identifiant du message d'erreur associé à la requête (voir 249 la directive <code class="directive"><a href="./mod/core.html#errorlogformat">ErrorLogFormat</a></code>)</td></tr> 250<tr class="odd"><td><code>CONN_LOG_ID</code></td> 251 <td>L'identifiant du message d'erreur associé à la connexion 252 (voir la directive <code class="directive"><a href="./mod/core.html#errorlogformat">ErrorLogFormat</a></code>)</td></tr> 253<tr><td><code>CONN_REMOTE_ADDR</code></td> 254 <td>L'adresse IP du correspondant pour la connexion (voir le module 255 <code class="module"><a href="./mod/mod_remoteip.html">mod_remoteip</a></code>)</td></tr> 256<tr class="odd"><td><code>CONTEXT_PREFIX</code></td> 257 <td /></tr> 258<tr><td><code>CONTEXT_DOCUMENT_ROOT</code></td> 259 <td /></tr> 260</table> 261 262 <p>Variables diverses</p> 263 264 <table class="bordered"><tr class="header"><th>Nom</th><th>Description</th></tr> 265<tr><td><code>TIME_YEAR</code></td> 266 <td>L'année courante (par exemple <code>2010</code>)</td></tr> 267<tr class="odd"><td><code>TIME_MON</code></td> 268 <td>Le mois courant (<code>01</code>, ..., <code>12</code>)</td></tr> 269<tr><td><code>TIME_DAY</code></td> 270 <td>Le jour courant dans le mois (<code>01</code>, ...)</td></tr> 271<tr class="odd"><td><code>TIME_HOUR</code></td> 272 <td>Les heures de la date courante (<code>00</code>, ..., 273 <code>23</code>)</td></tr> 274<tr><td><code>TIME_MIN</code></td> 275 <td>Les minutes de la date courante</td></tr> 276<tr class="odd"><td><code>TIME_SEC</code></td> 277 <td>Les secondes de la date courante</td></tr> 278<tr><td><code>TIME_WDAY</code></td> 279 <td>Le jour de la semaine (à partir de <code>0</code> pour 280 dimanche)</td></tr> 281<tr class="odd"><td><code>TIME</code></td> 282 <td>La date et heure au format <code>20101231235959</code></td></tr> 283<tr><td><code>SERVER_SOFTWARE</code></td> 284 <td>La chaîne contenant la version du serveur</td></tr> 285<tr class="odd"><td><code>API_VERSION</code></td> 286 <td>La date de la version de l'API (module magic number)</td></tr> 287</table> 288 289 <p>Certains modules, comme <code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code>, définissent des 290 variables supplémentaires.</p> 291 292</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> 293<div class="section"> 294<h2><a name="binop" id="binop">Opérateurs binaires</a></h2> 295 296 297 <p>À l'exception de quelques opérateurs de comparaison internes, les 298 opérateurs binaires sont de la forme 299 "<code>-[a-zA-Z][a-zA-Z0-9_]+</code>", autrement dit un signe moins 300 et au moins deux caractères. Le nom est insensible à la casse. Les 301 modules peuvent fournir des opérateurs binaires supplémentaires.</p> 302 303 <h3><a name="comp" id="comp">Opérateurs de comparaison</a></h3> 304 305 306 <table class="bordered"><tr class="header"><th>Nom</th><th>Alternative</th> <th>Description</th></tr> 307<tr><td><code>==</code></td> 308 <td><code>=</code></td> 309 <td>Egalité de chaînes</td></tr> 310<tr class="odd"><td><code>!=</code></td> 311 <td /> 312 <td>Inégalité de chaînes</td></tr> 313<tr><td><code><</code></td> 314 <td /> 315 <td>Chaîne inférieure à</td></tr> 316<tr class="odd"><td><code><=</code></td> 317 <td /> 318 <td>Chaîne inférieure ou égale à</td></tr> 319<tr><td><code>></code></td> 320 <td /> 321 <td>Chaîne supérieure à</td></tr> 322<tr class="odd"><td><code>>=</code></td> 323 <td /> 324 <td>Chaîne supérieure ou égale à</td></tr> 325<tr><td><code>=~</code></td> 326 <td /> 327 <td>La chaîne correspond à l'expression rationnelle</td></tr> 328<tr class="odd"><td><code>!~</code></td> 329 <td /> 330 <td>La chaîne ne correspond pas à l'expression rationnelle</td></tr> 331<tr><td><code>-eq</code></td> 332 <td><code>eq</code></td> 333 <td>Egalité d'entiers</td></tr> 334<tr class="odd"><td><code>-ne</code></td> 335 <td><code>ne</code></td> 336 <td>Inégalité d'entiers</td></tr> 337<tr><td><code>-lt</code></td> 338 <td><code>lt</code></td> 339 <td>Entier inférieur à</td></tr> 340<tr class="odd"><td><code>-le</code></td> 341 <td><code>le</code></td> 342 <td>Entier inférieur ou égal à</td></tr> 343<tr><td><code>-gt</code></td> 344 <td><code>gt</code></td> 345 <td>Entier supérieur à</td></tr> 346<tr class="odd"><td><code>-ge</code></td> 347 <td><code>ge</code></td> 348 <td>Entier supérieur ou égal à</td></tr> 349</table> 350 351 352 <h3><a name="binaryother" id="binaryother">Autres opérateurs binaires</a></h3> 353 354 355 <table class="bordered"><tr class="header"><th>Nom</th><th>Description</th></tr> 356<tr><td><code>-ipmatch</code></td> 357 <td>L'adresse IP correspond à adresse/masque</td></tr> 358<tr class="odd"><td><code>-strmatch</code></td> 359 <td>la chaîne de gauche correspond au modèle constitué par la 360 chaîne de droite (contenant des caractères génériques *, ?, [])</td></tr> 361<tr><td><code>-strcmatch</code></td> 362 <td>idem <code>-strmatch</code>, mais insensible à la casse</td></tr> 363<tr class="odd"><td><code>-fnmatch</code></td> 364 <td>idem <code>-strmatch</code>, mais les slashes ne sont pas 365 pris en compte par les caractères génériques</td></tr> 366</table> 367 368 369</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> 370<div class="section"> 371<h2><a name="unnop" id="unnop">Opérateurs unaires</a></h2> 372 373 374 <p>Les opérateurs unaires acceptent un seul argument et sont 375 de la forme "<code>-[a-zA-Z]</code>", 376 autrement dit le signe moins et un caractère. Le nom <em>est</em> 377 sensible à la casse. Les modules peuvent fournir des opérateurs 378 unaires supplémentaires.</p> 379 380 <table class="bordered"><tr class="header"><th>Nom</th><th>Description</th><th>Remarques particulières</th></tr> 381<tr><td><code>-d</code></td> 382 <td>L'argument est traité comme un nom de fichier. 383 Vrai si le fichier existe et correspond à un 384 répertoire</td><td>oui</td></tr> 385<tr class="odd"><td><code>-e</code></td> 386 <td>L'argument est traité comme un nom de fichier. Vrai si le 387 fichier (ou dir ou special) existe</td><td>oui</td></tr> 388<tr><td><code>-f</code></td> 389 <td>L'argument est traité comme un nom de fichier. Vrai si le 390 fichier existe et correspond à un fichier 391 régulier</td><td>oui</td></tr> 392<tr class="odd"><td><code>-s</code></td> 393 <td>L'argument est traité comme un nom de fichier. Vrai si le 394 fichier existe et n'est pas vide</td><td>oui</td></tr> 395<tr><td><code>-L</code></td> 396 <td>L'argument est traité comme un nom de fichier. Vrai si le 397 fichier existe et correspond à un lien 398 symbolique</td><td>oui</td></tr> 399<tr class="odd"><td><code>-h</code></td> 400 <td>L'argument est traité comme un nom de fichier. Vrai si le 401 fichier existe et correspond à un lien symbolique 402 (identique à <code>-L</code>)</td><td>oui</td></tr> 403<tr><td><code>-F</code></td> 404 <td>Vrai si la chaîne correspond a un fichier valide, accessible 405 avec tous les contrôles d'accès configurés pour ce chemin. A 406 cette fin, une sous-requête effectue la vérification, et vous 407 devez utiliser ce drapeau avec soin car il peut impacter les 408 performances de votre serveur !</td><td /></tr> 409<tr class="odd"><td><code>-U</code></td> 410 <td>Vrai si la chaîne correspond a une URL valide, accessible 411 avec tous les contrôles d'accès configurés pour ce chemin. A 412 cette fin, une sous-requête effectue la vérification, et vous 413 devez utiliser ce drapeau avec soin car il peut impacter les 414 performances de votre serveur !</td><td /></tr> 415<tr><td><code>-A</code></td> 416 <td>Alias pour <code>-U</code></td><td /></tr> 417<tr class="odd"><td><code>-n</code></td> 418 <td>Vrai si la chaîne n'est pas vide</td><td /></tr> 419<tr><td><code>-z</code></td> 420 <td>Vrai si la chaîne est vide</td><td /></tr> 421<tr class="odd"><td><code>-T</code></td> 422 <td>Faux si la chaîne est vide, "<code>0</code>", 423 "<code>off</code>", "<code>false</code>", ou "<code>no</code>" 424 (insensibilité à la casse). Vrai dans le cas contraire.</td><td /></tr> 425<tr><td><code>-R</code></td> 426 <td>Idem "<code>%{REMOTE_ADDR} -ipmatch ...</code>", en plus 427 efficace 428 </td><td /></tr> 429</table> 430 431 <p>Les opérateurs marqués comme "restreints" ne sont pas disponibles 432 avec certains modules comme <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>.</p> 433 434</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> 435<div class="section"> 436<h2><a name="functions" id="functions">Fonctions</a></h2> 437 438 439 <p>Normalement, les fonctions dont la valeur est une chaîne acceptent une chaîne 440 comme argument et renvoient une chaîne. Les noms de fonctions sont 441 insensibles à la casse. Les modules peuvent fournir des fonctions 442 supplémentaires.</p> 443 444 <table class="bordered"><tr class="header"><th>Nom</th><th>Description</th><th>Notes particulières</th></tr> 445<tr><td><code>req</code>, <code>http</code></td> 446 <td>Lit l'en-tête de requête HTTP ; les noms 447 d'en-tête correspondants peuvent être ajoutés 448 à l'en-tête Vary, 449 voir ci-dessous</td><td /></tr> 450<tr class="odd"><td><code>req_novary</code></td> 451 <td>Identique à <code>req</code>, mais aucun nom d'en-tête n'est 452 ajouté à l'en-tête Vary</td><td /></tr> 453<tr><td><code>resp</code></td> 454 <td>Lit l'en-tête de réponse HTTP (La plupart des en-têtes de la réponse 455 ne seront pas encore définis pendant le traitement de la directive 456 <code class="directive"><If></code>)</td><td /></tr> 457<tr class="odd"><td><code>reqenv</code></td> 458 <td>Recherche une variable d'environnement de requête (on 459 peut aussi utiliser le raccourci <code>v</code>). 460 </td> 461 <td>ordonnancement</td></tr> 462<tr><td><code>osenv</code></td> 463 <td>Recherche une variable d'environnement du système 464 d'exploitation</td><td /></tr> 465<tr class="odd"><td><code>note</code></td> 466 <td>Recherche une note de requête</td><td>ordonnancement</td></tr> 467<tr><td><code>env</code></td> 468 <td>Renvoie le premier résultat positif de <code>note</code>, 469 <code>reqenv</code>, <code>osenv</code></td><td>ordonnancement</td></tr> 470<tr class="odd"><td><code>tolower</code></td> 471 <td>Convertit une chaîne en minuscules</td><td /></tr> 472<tr><td><code>toupper</code></td> 473 <td>Convertit une chaîne en majuscules</td><td /></tr> 474<tr class="odd"><td><code>escape</code></td> 475 <td>Echappe les caractères spéciaux en codage hexadécimal</td><td /></tr> 476<tr><td><code>unescape</code></td> 477 <td>"Déséchappe" les chaînes codées 478 en hexadécimal, en ne gardant encodés que les slashes; renvoie la chaîne vide 479 si la séquence %00 est rencontrée</td><td /></tr> 480<tr class="odd"><td><code>base64</code></td> 481 <td>Encode la chaîne en base64</td><td /></tr> 482<tr><td><code>unbase64</code></td> 483 <td>Décode les chaînes codées en base64, renvoie une chaîne 484 tronquée si le caractère 0x00 est rencontré</td><td /></tr> 485<tr class="odd"><td><code>md5</code></td> 486 <td>Génère un hash de la chaîne en utilisant MD5, puis code le 487 hash obtenu en hexadécimal</td><td /></tr> 488<tr><td><code>sha1</code></td> 489 <td>Génère un hash de la chaîne en utilisant SHA1, puis encode 490 le hash obtenu en hexadécimal</td><td /></tr> 491<tr class="odd"><td><code>file</code></td> 492 <td>Lit le contenu d'un fichier(fins de lignes incluses, si 493 elles existent)</td><td>limité</td></tr> 494<tr><td><code>filesize</code></td> 495 <td>Renvoie la taille d'un fichier (ou 0 si le fichier n'existe 496 pas ou ne correspond pas à un fichier régulier)</td><td>limité</td></tr> 497<tr class="odd"><td><code>ldap</code></td> 498 <td>Echappe les caractères selon la RFC4514 (Echappement des 499 noms distinctifs LDAP - DN) et la RFC4515 (Echappement des 500 filtres LDAP).<br /> 501 Disponible à partir de la version 2.4.53 du serveur HTTP 502 Apache.</td><td /></tr> 503</table> 504 505 <p>Les fonctions marquées comme "limité" dans la dernière colonne ne sont 506 pas disponibles avec certains modules comme 507 <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>.</p> 508 509 <p>Les fonctions marquées comme "ordonnancement" dans la dernière colonne 510 nécessitent une attention particulière pour l'ordonnancement des différents 511 composants du serveur, spécialement lorsque la fonction est utilisée au sein 512 d'une directive <<code class="directive"><a href="./mod/core.html#if">If</a></code>> qui est 513 évaluée relativement tôt.</p> 514 <div class="note"> 515 <h3>Ordonnancement des variables d'environnement</h3> 516 Lorsque des variables d'environnement sont évaluées au sein d'une directive 517 <<code class="directive"><a href="./mod/core.html#if">If</a></code>>, il est important de tenir 518 compte du moment où cette évaluation intervient dans le traitement de la 519 requête. Par exemple, toute directive définie en dehors d'un contexte de 520 serveur virtuel (directory, location, htaccess) aura peu de chance d'être 521 déjà exécutée. Ainsi la directive <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> est une directive qui s'exécute 522 avant cette évaluation. 523 <br /> 524 <br /> 525 Lorsque <code>reqenv</code> est utilisé en dehors de la directive 526 <<code class="directive"><a href="./mod/core.html#if">If</a></code>>, l'évaluation survient en 527 général plus tard, mais le moment exact dépend de la directive dans laquelle 528 l'expression a été utilisée. 529 </div> 530 531 <p>Lorsque les fonctions <code>req</code> ou <code>http</code> sont 532 utilisées, le nom d'en-tête sera automatiquement ajouté à l'en-tête 533 Vary de la réponse HTTP, sauf spécification contraire pour la 534 directive qui accepte l'expression comme paramètre. La 535 fonction <code>req_novary</code> permet d'empêcher l'ajout de noms 536 d'en-têtes à l'en-tête Vary.</p> 537 538 <p>En plus des fonctions dont la valeur est une chaîne, il existe 539 aussi des fonctions dont la valeur est une liste, qui acceptent une 540 chaîne comme argument, et renvoient une liste de mots, autrement dit 541 une liste de chaînes. La liste de mot peut être utilisée avec 542 l'opérateur spécial <code>-in</code>. Les noms de fonctions sont 543 insensibles à la casse. Les modules peuvent fournir des fonctions 544 supplémentaires.</p> 545 546 <p>Il n'existe pas de fonctions internes dont la valeur est une 547 liste. Le module <code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code> fournit la fonction 548 <code>PeerExtList</code>. Voir la description de la directive 549 <code class="directive"><a href="./mod/mod_ssl.html#sslrequire">SSLRequire</a></code> pour plus de 550 détails (notez que la fonction <code>PeerExtList</code> peut aussi 551 être utilisée en dehors de la directive <code class="directive"><a href="./mod/mod_ssl.html#sslrequire">SSLRequire</a></code>).</p> 552 553</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> 554<div class="section"> 555<h2><a name="examples" id="examples">Exemples d'expressions</a></h2> 556 557 558 <p>Les exemples suivants montent comment utiliser les 559 expressions pour évaluer les requêtes :</p> 560 561 <pre class="prettyprint lang-config"># Comparer le nom d'hôte avec example.com et rediriger vers 562# www.example.com si le nom d'hôte correspond 563<If "%{HTTP_HOST} == 'example.com'"> 564 Redirect permanent "/" "http://www.example.com/" 565</If> 566 567# Forcer le type text/plain si un fichier fait l'objet d'une 568# requête dont la chaîne de paramètres contient 'forcetext' 569<If "%{QUERY_STRING} =~ /forcetext/"> 570 ForceType text/plain 571</If> 572 573# N'autoriser l'accès à ce contenu que pendant les heures de 574# travail 575<Directory "/foo/bar/business"> 576 Require expr %{TIME_HOUR} -gt 9 && %{TIME_HOUR} -lt 17 577</Directory> 578 579# Vérifie si un en-tête HTTP correspond à une des valeurs d'une liste 580<If "%{HTTP:X-example-header} in { 'foo', 'bar', 'baz' }"> 581 La définition de l'en-tête correspond à une des valeurs recherchées 582</If> 583 584# Recherche la valeur d'une expression rationnelle dans une variable 585# d'environnement, et renvoie la négation du résultat. 586<If "! reqenv('REDIRECT_FOO') =~ /bar/"> 587 La condition est vérifiée 588</If> 589 590# Vérifie le résultat de la recherche d'une correspondance d'URI dans un 591# contexte de répertoire avec l'option -f 592<Directory "/var/www"> 593 AddEncoding x-gzip gz 594<If "-f '%{REQUEST_FILENAME}.unzipme' && ! %{HTTP:Accept-Encoding} =~ /gzip/"> 595 SetOutputFilter INFLATE 596</If> 597</Directory> 598 599# Vérifie l'adresse IP du client 600<If "-R '192.168.1.0/24'"> 601 Header set matched true 602</If> 603 604# Exemple de fonction dans un contexte booléen 605<If "md5('foo') == 'acbd18db4cc2f85cedef654fccc4a4d8'"> 606 Header set checksum-matched true 607</If> 608 609# Function example in string context 610Header set foo-checksum "expr=%{md5:foo}" 611 612# L'exemple suivant retarde l'évaluation de la clause de condition par rapport à 613# <If> 614Header always set CustomHeader my-value "expr=%{REQUEST_URI} =~ m#^/special_path\.php$#" 615 616# Journalisation conditionnelle 617CustomLog logs/access-errors.log common "expr=%{REQUEST_STATUS} >= 400" 618CustomLog logs/access-errors-specific.log common "expr=%{REQUEST_STATUS} -in {'405','410'}"</pre> 619 620</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> 621<div class="section"> 622<h2><a name="other" id="other">Autres</a></h2> 623 624 625 <table class="bordered"><tr class="header"><th>Nom</th><th>Alternative</th> <th>Description</th></tr> 626<tr><td><code>-in</code></td> 627 <td><code>in</code></td> 628 <td>chaîne contenue dans une liste de mots</td></tr> 629<tr class="odd"><td><code>/regexp/</code></td> 630 <td><code>m#regexp#</code></td> 631 <td>Expression rationnelle (la seconde forme permet de spécifier 632 des délimiteurs autres que /)</td></tr> 633<tr><td><code>/regexp/i</code></td> 634 <td><code>m#regexp#i</code></td> 635 <td>Expression rationnelle insensible à la casse</td></tr> 636<tr class="odd"><td><code>$0 ... $9</code></td> 637 <td /> 638 <td>Références arrières dans les expressions rationnelles</td></tr> 639</table> 640 641 <h3><a name="rebackref" id="rebackref">Références arrières dans les expressions rationnelles</a></h3> 642 643 <p>Les chaînes <code>$0</code> ... <code>$9</code> permettent de 644 référencer les groupes de capture en provenance d'expressions 645 rationnelles précédemment exécutées et mises en correspondance avec 646 succès. Elles ne peuvent normalement être utilisées que dans la 647 même expression que celle mise en correspondance, mais certains 648 modules permettent de les utiliser de manière spéciale.</p> 649 650 651</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> 652<div class="section"> 653<h2><a name="sslrequire" id="sslrequire">Comparaison avec SSLRequire</a></h2> 654 655 <p>La syntaxe <em>ap_expr</em> consiste principalement en une 656 surcouche de la syntaxe de la directive obsolète <code class="directive"><a href="./mod/mod_ssl.html#sslrequire">SSLRequire</a></code>. Vous pouvez consulter la 657 liste de leur différences dans la documentation de la directive 658 <code class="directive"><a href="./mod/mod_ssl.html#sslrequire">SSLRequire</a></code>.</p> 659</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> 660<div class="section"> 661<h2><a name="compatibility" id="compatibility">Historique de version</a></h2> 662 663 <p>La <a href="#functions">fonction</a> <code>req_novary</code> est 664 disponible à partir de la version 2.4.4 du serveur HTTP Apache.</p> 665</div></div> 666<div class="bottomlang"> 667<p><span>Langues Disponibles: </span><a href="./en/expr.html" hreflang="en" rel="alternate" title="English"> en </a> | 668<a href="./fr/expr.html" title="Français"> fr </a></p> 669</div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />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 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 Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> 670<script type="text/javascript"><!--//--><![CDATA[//><!-- 671var comments_shortname = 'httpd'; 672var comments_identifier = 'http://httpd.apache.org/docs/2.4/expr.html'; 673(function(w, d) { 674 if (w.location.hostname.toLowerCase() == "httpd.apache.org") { 675 d.write('<div id="comments_thread"><\/div>'); 676 var s = d.createElement('script'); 677 s.type = 'text/javascript'; 678 s.async = true; 679 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; 680 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); 681 } 682 else { 683 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); 684 } 685})(window, document); 686//--><!]]></script></div><div id="footer"> 687<p class="apache">Copyright 2022 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> 688<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- 689if (typeof(prettyPrint) !== 'undefined') { 690 prettyPrint(); 691} 692//--><!]]></script> 693</body></html>