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