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