]> granicus.if.org Git - apache/blob - docs/manual/expr.xml.fr
mark async websockets tunnel stuff as experimental
[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 : 1595353 -->
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_authnz_ldap.html#reqsearch">Require ldap-search</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 </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)</td></tr>
237     <tr><td><code>REMOTE_IDENT</code></td>
238         <td>Le nom de l'utilisateur d&eacute;fini par <module>mod_ident</module></td></tr>
239     <tr><td><code>SERVER_NAME</code></td>
240         <td>La valeur de la directive <directive
241         module="core">ServerName</directive> du serveur virtuel courant</td></tr>
242     <tr><td><code>SERVER_PORT</code></td>
243         <td>Le port associ&eacute; au serveur virtuel courant ; voir la
244         directive <directive module="core">ServerName</directive></td></tr>
245     <tr><td><code>SERVER_ADMIN</code></td>
246         <td>La valeur de la directive <directive
247         module="core">ServerAdmin</directive> du serveur virtuel courant</td></tr>
248     <tr><td><code>SERVER_PROTOCOL</code></td>
249         <td>Le protocole utilis&eacute; par la requ&ecirc;te (par
250         exemple HTTP/1.1). Avec certains types de sous-requ&ecirc;tes
251         internes, cette variable prend la valeur <code>INCLUDED</code>.</td></tr>
252     <tr><td><code>SERVER_PROTOCOL_VERSION</code></td>
253         <td>Un nombre qui repr&eacute;sente la version HTTP de la requ&ecirc;te :
254         <code>1000 * major + minor</code>. Par exemple,
255         <code>1001</code> correspond &agrave; HTTP/1.1 et <code>9</code> &agrave;
256         HTTP/0.9.</td></tr>
257     <tr><td><code>SERVER_PROTOCOL_VERSION_MAJOR</code></td>
258         <td>La partie majeure de la version HTTP de la requ&ecirc;te, par
259         exemple <code>1</code> pour HTTP/1.0.</td></tr>
260     <tr><td><code>SERVER_PROTOCOL_VERSION_MINOR</code></td>
261         <td>La partie mineure de la version HTTP de la requ&ecirc;te, par
262         exemple <code>0</code> pour HTTP/1.0.</td></tr>
263     <tr><td><code>DOCUMENT_ROOT</code></td>
264         <td>La valeur de la directive <directive
265         module="core">DocumentRoot</directive> du serveur virtuel
266         courant</td></tr>
267     <tr><td><code>AUTH_TYPE</code></td>
268         <td>La valeur de la directive <directive
269         module="mod_authn_core">AuthType</directive> (par exemple
270         "<code>basic</code>")</td></tr>
271     <tr><td><code>CONTENT_TYPE</code></td>
272         <td>Le type de contenu de la r&eacute;ponse</td></tr>
273     <tr><td><code>HANDLER</code></td>
274         <td>Le nom du <a href="handler.html">gestionnaire</a> qui a
275         g&eacute;n&eacute;r&eacute; la r&eacute;ponse</td></tr>
276     <tr><td><code>HTTPS</code></td>
277         <td>"<code>on</code>" si la requ&ecirc;te utilise https,
278         "<code>off</code>" dans le cas contraire</td></tr>
279     <tr><td><code>IPV6</code></td>
280         <td>"<code>on</code>" si la connexion utilise IPv6,
281         "<code>off</code>" dans le cas contraire</td></tr>
282     <tr><td><code>REQUEST_STATUS</code></td>
283         <td>Le code d'erreur HTTP de la requ&ecirc;te</td></tr>
284     <tr><td><code>REQUEST_LOG_ID</code></td>
285         <td>L'identifiant du message d'erreur associ&eacute; &agrave; la requ&ecirc;te (voir
286         la directive <directive
287         module="core">ErrorLogFormat</directive>)</td></tr>
288     <tr><td><code>CONN_LOG_ID</code></td>
289         <td>L'identifiant du message d'erreur associ&eacute; &agrave; la connexion
290         (voir la directive <directive
291         module="core">ErrorLogFormat</directive>)</td></tr>
292     <tr><td><code>CONN_REMOTE_ADDR</code></td>
293         <td>L'adresse IP du correspondant pour la connexion (voir le module
294         <module>mod_remoteip</module>)</td></tr>
295     <tr><td><code>CONTEXT_PREFIX</code></td>
296         <td></td></tr>
297     <tr><td><code>CONTEXT_DOCUMENT_ROOT</code></td>
298         <td></td></tr>  
299
300     </table>
301
302     <p>Variables diverses</p>
303
304     <table border="1" style="zebra">
305     <columnspec><column width=".4"/><column width=".6"/></columnspec>
306
307     <tr><th>Nom</th><th>Description</th></tr>
308     <tr><td><code>TIME_YEAR</code></td>
309         <td>L'ann&eacute;e courante (par exemple <code>2010</code>)</td></tr>
310     <tr><td><code>TIME_MON</code></td>
311         <td>Le mois courant (<code>1</code>, ..., <code>12</code>)</td></tr>
312     <tr><td><code>TIME_DAY</code></td>
313         <td>Le jour courant dans le mois</td></tr>
314     <tr><td><code>TIME_HOUR</code></td>
315         <td>Les heures de la date courante (<code>0</code>, ...,
316         <code>23</code>)</td></tr>
317     <tr><td><code>TIME_MIN</code></td>
318         <td>Les minutes de la date courante</td></tr>
319     <tr><td><code>TIME_SEC</code></td>
320         <td>Les secondes de la date courante</td></tr>
321     <tr><td><code>TIME_WDAY</code></td>
322         <td>Le jour de la semaine (&agrave; partir de <code>0</code> pour
323         dimanche)</td></tr>
324     <tr><td><code>TIME</code></td>
325         <td>La date et heure au format <code>20101231235959</code></td></tr>
326     <tr><td><code>SERVER_SOFTWARE</code></td>
327         <td>La cha&icirc;ne contenant la version du serveur</td></tr>
328     <tr><td><code>API_VERSION</code></td>
329         <td>La date de la version de l'API (module magic number)</td></tr>
330     </table>
331
332     <p>Certains modules, comme <module>mod_ssl</module>, d&eacute;finissent des
333     variables suppl&eacute;mentaires.</p>
334
335 </section>
336
337 <section id="binop">
338     <title>Op&eacute;rateurs binaires</title>
339
340     <p>&Agrave; l'exception de quelques op&eacute;rateurs de comparaison internes, les
341     op&eacute;rateurs binaires sont de la forme
342     "<code>-[a-zA-Z][a-zA-Z0-9_]+</code>", autrement dit un signe moins
343     et au moins deux caract&egrave;res. Le nom est insensible &agrave; la casse. Les
344     modules peuvent fournir des op&eacute;rateurs binaires suppl&eacute;mentaires.</p>
345
346     <section id="comp">
347     <title>Op&eacute;rateurs de comparaison</title>
348
349     <table border="1" style="zebra">
350     <columnspec><column width=".2"/><column width=".2"/><column width=".6"/></columnspec>
351
352     <tr><th>Nom</th><th>Alternative</th> <th>Description</th></tr>
353     <tr><td><code>==</code></td>
354         <td><code>=</code></td>
355         <td>Egalit&eacute; de cha&icirc;nes</td></tr>
356     <tr><td><code>!=</code></td>
357         <td></td>
358         <td>In&eacute;galit&eacute; de cha&icirc;nes</td></tr>
359     <tr><td><code>&lt;</code></td>
360         <td></td>
361         <td>Cha&icirc;ne inf&eacute;rieure &agrave;</td></tr>
362     <tr><td><code>&lt;=</code></td>
363         <td></td>
364         <td>Cha&icirc;ne inf&eacute;rieure ou &eacute;gale &agrave;</td></tr>
365     <tr><td><code>&gt;</code></td>
366         <td></td>
367         <td>Cha&icirc;ne sup&eacute;rieure &agrave;</td></tr>
368     <tr><td><code>&gt;=</code></td>
369         <td></td>
370         <td>Cha&icirc;ne sup&eacute;rieure ou &eacute;gale &agrave;</td></tr>
371     <tr><td><code>=~</code></td>
372         <td></td>
373         <td>La cha&icirc;ne correspond &agrave; l'expression rationnelle</td></tr>
374     <tr><td><code>!~</code></td>
375         <td></td>
376         <td>La cha&icirc;ne ne correspond pas &agrave; l'expression rationnelle</td></tr>       
377     <tr><td><code>-eq</code></td>
378         <td><code>eq</code></td>
379         <td>Egalit&eacute; d'entiers</td></tr>
380     <tr><td><code>-ne</code></td>
381         <td><code>ne</code></td>
382         <td>In&eacute;galit&eacute; d'entiers</td></tr>
383     <tr><td><code>-lt</code></td>
384         <td><code>lt</code></td>
385         <td>Entier inf&eacute;rieur &agrave;</td></tr>
386     <tr><td><code>-le</code></td>
387         <td><code>le</code></td>
388         <td>Entier inf&eacute;rieur ou &eacute;gal &agrave;</td></tr>
389     <tr><td><code>-gt</code></td>
390         <td><code>gt</code></td>
391         <td>Entier sup&eacute;rieur &agrave;</td></tr>
392     <tr><td><code>-ge</code></td>
393         <td><code>ge</code></td>
394         <td>Entier sup&eacute;rieur ou &eacute;gal &agrave;</td></tr>
395     </table>
396     </section>
397
398     <section id="binaryother">
399     <title>Autres op&eacute;rateurs binaires</title>
400
401     <table border="1" style="zebra">
402     <columnspec><column width=".2"/><column width=".8"/></columnspec>
403
404     <tr><th>Nom</th><th>Description</th></tr>
405     <tr><td><code>-ipmatch</code></td>
406         <td>L'adresse IP correspond &agrave; adresse/masque</td></tr>
407     <tr><td><code>-strmatch</code></td>
408         <td>la cha&icirc;ne de gauche correspond au mod&egrave;le constitu&eacute; par la
409         cha&icirc;ne de droite (contenant des caract&egrave;res g&eacute;n&eacute;riques *, ?, [])</td></tr>
410     <tr><td><code>-strcmatch</code></td>
411         <td>idem <code>-strmatch</code>, mais insensible &agrave; la casse</td></tr>
412     <tr><td><code>-fnmatch</code></td>
413         <td>idem <code>-strmatch</code>, mais les slashes ne sont pas
414         pris en compte par les caract&egrave;res g&eacute;n&eacute;riques</td></tr>
415     </table>
416     </section>
417
418 </section>
419
420 <section id="unnop">
421     <title>Op&eacute;rateurs unaires</title>
422
423     <p>Les op&eacute;rateurs unaires acceptent un seul argument et sont
424     de la forme "<code>-[a-zA-Z]</code>",
425     autrement dit le signe moins et un caract&egrave;re. Le nom <em>est</em>
426     sensible &agrave; la casse. Les modules peuvent fournir des op&eacute;rateurs
427     unaires suppl&eacute;mentaires.</p>
428
429     <table border="1" style="zebra">
430     <columnspec><column width=".2"/><column width=".2"/><column width=".6"/></columnspec>
431
432     <tr><th>Nom</th><th>Description</th><th>Restreint</th></tr>
433     <tr><td><code>-d</code></td>
434         <td>L'argument est trait&eacute; comme un nom de fichier. 
435         Vrai si le fichier existe et correspond &agrave; un
436         r&eacute;pertoire</td><td>oui</td></tr>
437     <tr><td><code>-e</code></td>
438         <td>L'argument est trait&eacute; comme un nom de fichier. Vrai si le
439         fichier (ou dir ou special) existe</td><td>oui</td></tr>
440     <tr><td><code>-f</code></td>
441         <td>L'argument est trait&eacute; comme un nom de fichier. Vrai si le
442         fichier existe et correspond &agrave; un fichier
443         r&eacute;gulier</td><td>oui</td></tr>
444     <tr><td><code>-s</code></td>
445         <td>L'argument est trait&eacute; comme un nom de fichier. Vrai si le
446         fichier existe et n'est pas vide</td><td>oui</td></tr>
447     <tr><td><code>-L</code></td>
448         <td>L'argument est trait&eacute; comme un nom de fichier. Vrai si le
449         fichier existe et correspond &agrave; un lien
450         symbolique</td><td>oui</td></tr>
451     <tr><td><code>-h</code></td>
452         <td>L'argument est trait&eacute; comme un nom de fichier. Vrai si le
453         fichier existe et correspond &agrave; un lien symbolique
454         (identique &agrave; <code>-L</code>)</td><td>oui</td></tr>
455     <tr><td><code>-F</code></td>
456         <td>Vrai si la cha&icirc;ne correspond a un fichier valide, accessible
457         avec tous les contr&ocirc;les d'acc&egrave;s configur&eacute;s pour ce chemin. A
458         cette fin, une sous-requ&ecirc;te effectue la v&eacute;rification, et vous
459         devez utiliser ce drapeau avec soin car il peut impacter les
460         performances de votre serveur !</td><td></td></tr>
461     <tr><td><code>-U</code></td>
462         <td>Vrai si la cha&icirc;ne correspond a une URL valide, accessible
463         avec tous les contr&ocirc;les d'acc&egrave;s configur&eacute;s pour ce chemin. A
464         cette fin, une sous-requ&ecirc;te effectue la v&eacute;rification, et vous
465         devez utiliser ce drapeau avec soin car il peut impacter les
466         performances de votre serveur !</td><td></td></tr>
467     <tr><td><code>-A</code></td>
468         <td>Alias pour <code>-U</code></td><td></td></tr>
469     <tr><td><code>-n</code></td>
470         <td>Vrai si la cha&icirc;ne n'est pas vide</td><td></td></tr>
471     <tr><td><code>-z</code></td>
472         <td>Vrai si la cha&icirc;ne est vide</td><td></td></tr>
473     <tr><td><code>-T</code></td>
474         <td>Faux si la cha&icirc;ne est vide, "<code>0</code>",
475         "<code>off</code>", "<code>false</code>", ou "<code>no</code>"
476         (insensibilit&eacute; &agrave; la casse). Vrai dans le cas contraire.</td><td></td></tr>
477     <tr><td><code>-R</code></td>
478         <td>Idem "<code>%{REMOTE_ADDR} -ipmatch ...</code>", en plus
479         efficace
480         </td><td></td></tr>
481     </table>
482
483     <p>Les op&eacute;rateurs marqu&eacute;s comme "restreints" ne sont pas disponibles
484     avec certains modules comme <module>mod_include</module>.</p>
485
486 </section>
487
488 <section id="functions">
489     <title>Fonctions</title>
490
491     <p>Normalement, les fonctions dont la valeur est une cha&icirc;ne acceptent une cha&icirc;ne
492     comme argument et renvoient une cha&icirc;ne. Les noms de fonctions sont
493     insensibles &agrave; la casse. Les modules peuvent fournir des fonctions
494     suppl&eacute;mentaires.</p>
495
496     <table border="1" style="zebra">
497     <columnspec><column width=".2"/><column width=".4"/><column width=".4"/></columnspec>
498
499     <tr><th>Nom</th><th>Description</th><th>Restreint</th></tr>
500     <tr><td><code>req</code>, <code>http</code></td>
501         <td>Lit l'en-t&ecirc;te de requ&ecirc;te HTTP ; les noms
502         d'en-t&ecirc;te correspondants peuvent &ecirc;tre ajout&eacute;s &agrave; l'en-t&ecirc;te Vary,
503         voir ci-dessous</td><td></td></tr>
504     <tr><td><code>req_novary</code></td>
505         <td>Identique &agrave; <code>req</code>, mais les noms
506         d'en-t&ecirc;te correspondants ne seront pas ajout&eacute;s &agrave; l'en-t&ecirc;te Vary</td><td></td></tr>
507     <tr><td><code>resp</code></td>
508         <td>Lit l'en-t&ecirc;te de r&eacute;ponse HTTP</td><td></td></tr>
509     <tr><td><code>reqenv</code></td>
510         <td>Recherche une variable d'environnement de requ&ecirc;te (on
511         peut aussi utiliser le raccourci <code>v</code>).</td><td></td></tr>
512     <tr><td><code>osenv</code></td>
513         <td>Recherche une variable d'environnement du syst&egrave;me
514         d'exploitation</td><td></td></tr>
515     <tr><td><code>note</code></td>
516         <td>Recherche une note de requ&ecirc;te</td><td></td></tr>
517     <tr><td><code>env</code></td>
518         <td>Renvoie le premier r&eacute;sultat positif de <code>note</code>,
519         <code>reqenv</code>, <code>osenv</code></td><td></td></tr>
520     <tr><td><code>tolower</code></td>
521         <td>Convertit une cha&icirc;ne en minuscules</td><td></td></tr>
522     <tr><td><code>toupper</code></td>
523         <td>Convertit une cha&icirc;ne en majuscules</td><td></td></tr>
524     <tr><td><code>escape</code></td>
525         <td>Echappe les caract&egrave;res sp&eacute;ciaux en codage hexad&eacute;cimal</td><td></td></tr>
526     <tr><td><code>unescape</code></td>
527         <td>"D&eacute;s&eacute;chappe" les cha&icirc;nes cod&eacute;es
528         en hexad&eacute;cimal, en ne gardant encod&eacute;s que les slashes; renvoie la cha&icirc;ne vide
529         si la s&eacute;quence %00 est rencontr&eacute;e</td><td></td></tr>
530     <tr><td><code>base64</code></td>
531         <td>Encode la cha&icirc;ne en utilisant le codage base64</td><td></td></tr>
532     <tr><td><code>unbase64</code></td>
533         <td>D&eacute;code une cha&icirc;ne cod&eacute;e en base64, renvoie une cha&icirc;ne
534         tronqu&eacute;e si le caract&egrave;re 0x00 est rencontr&eacute;</td><td></td></tr>
535     <tr><td><code>md5</code></td>
536         <td>Effectue un hashage MD5 de la cha&icirc;ne, puis encode le hash
537         avec un codage hexad&eacute;cimal</td><td></td></tr>
538     <tr><td><code>sha1</code></td>
539         <td>Effectue un hashage SHA1 de la cha&icirc;ne, puis encode le hash
540         avec un codage hexad&eacute;cimal</td><td></td></tr>   
541     <tr><td><code>file</code></td>
542         <td>Lit le contenu d'un fichier</td><td>oui</td></tr>
543     <tr><td><code>filesize</code></td>
544         <td>Renvoie la taille d'un fichier (ou 0 si le fichier n'existe
545         pas ou ne correspond pas &agrave; un fichier
546         r&eacute;gulier)</td><td>oui</td></tr>
547     <tr><td><code>ldap</code></td>
548         <td>Echappe les caract&egrave;res selon la RFC4514 (Echappement des
549         noms distinctifs LDAP - DN) et la RFC4515 (Echappement des
550         filtres LDAP).</td><td></td></tr>
551
552     </table>
553
554     <p>Les fonctions marqu&eacute;es comme "restreints" ne sont pas disponibles
555     avec certains modules comme <module>mod_include</module>.</p>
556
557     <p>Lorsque les fonctions <code>req</code> ou <code>http</code> sont
558     utilis&eacute;es, le nom d'en-t&ecirc;te sera automatiquement ajout&eacute; &agrave; l'en-t&ecirc;te
559     Vary de la r&eacute;ponse HTTP, sauf sp&eacute;cification contraire pour la
560     directive qui accepte l'expression comme param&egrave;tre. La fonction
561     <code>req_novary</code> permet d'emp&ecirc;cher cet ajout.</p>
562
563     <p>En plus des fonctions dont la valeur est une cha&icirc;ne, il existe
564     aussi des fonctions dont la valeur est une liste, qui acceptent une
565     cha&icirc;ne comme argument, et renvoient une liste de mots, autrement dit
566     une liste de cha&icirc;nes. La liste de mot peut &ecirc;tre utilis&eacute;e avec
567     l'op&eacute;rateur sp&eacute;cial <code>-in</code>. Les noms de fonctions sont
568     insensibles &agrave; la casse. Les modules peuvent fournir des fonctions
569     suppl&eacute;mentaires.</p>
570
571     <p>Il n'existe pas de fonctions internes dont la valeur est une
572     liste. Le module <module>mod_ssl</module> fournit la fonction
573     <code>PeerExtList</code>. Voir la description de la directive
574     <directive module="mod_ssl">SSLRequire</directive> pour plus de
575     d&eacute;tails (notez que la fonction <code>PeerExtList</code> peut aussi
576     &ecirc;tre utilis&eacute;e en dehors de la directive <directive
577     module="mod_ssl">SSLRequire</directive>).</p>
578
579 </section>
580 <section id="examples">
581     
582         <title>Exemples d'expressions</title>
583         <p>Les exemples suivants montent comment utiliser les
584         expressions pour &eacute;valuer les requ&ecirc;tes :</p>
585         <!-- This section should probably be extended with more, useful examples -->
586         <highlight language="config">
587 # Comparer le nom d'h&ocirc;te avec example.com et rediriger vers
588 # www.example.com si le nom d'h&ocirc;te correspond
589 &lt;If "%{HTTP_HOST} == 'example.com'"&gt;
590     Redirect permanent / http://www.example.com/
591 &lt;/If&gt;
592
593 # Forcer le type text/plain si un fichier fait l'objet d'une
594 # requ&ecirc;te dont la cha&icirc;ne de param&egrave;tres contient 'forcetext'
595 &lt;If "%{QUERY_STRING} =~ /forcetext/"&gt;
596     ForceType text/plain
597 &lt;/If&gt;
598
599 # N'autoriser l'acc&egrave;s &agrave; ce contenu que pendant les heures de
600 # travail
601 &lt;Directory "/foo/bar/business"&gt;
602      Require expr %{TIME_HOUR} -gt 9 &amp;&amp; %{TIME_HOUR} -lt 17
603 &lt;/Directory&gt;      
604         </highlight>
605 </section>
606
607 <section id="other">
608     <title>Autres</title>
609
610     <table border="1" style="zebra">
611     <columnspec><column width=".2"/><column width=".2"/><column width=".6"/></columnspec>
612
613     <tr><th>Nom</th><th>Alternative</th> <th>Description</th></tr>
614     <tr><td><code>-in</code></td>
615         <td><code>in</code></td>
616         <td>cha&icirc;ne contenue dans une liste de cha&icirc;nes</td></tr>
617     <tr><td><code>/regexp/</code></td>
618         <td><code>m#regexp#</code></td>
619         <td>Expression rationnelle (la seconde forme permet de sp&eacute;cifier
620         des d&eacute;limiteurs autres que /)</td></tr>
621     <tr><td><code>/regexp/i</code></td>
622         <td><code>m#regexp#i</code></td>
623         <td>Expression rationnelle insensible &agrave; la casse</td></tr>
624     <tr><td><code>$0 ... $9</code></td>
625         <td></td>
626         <td>R&eacute;f&eacute;rences arri&egrave;res dans les expressions rationnelles</td></tr>
627     </table>
628
629     <section id="rebackref">
630         <title>R&eacute;f&eacute;rences arri&egrave;res dans les expressions rationnelles</title>
631         <p>Les cha&icirc;nes <code>$0</code> ... <code>$9</code> permettent de
632         r&eacute;f&eacute;rencer les groupes de capture en provenance d'expressions
633         rationnelles pr&eacute;c&eacute;demment ex&eacute;cut&eacute;es et mises en correspondance avec
634         succ&egrave;s. Elles ne peuvent normalement &ecirc;tre utilis&eacute;es que dans la
635         m&ecirc;me expression que celle mise en correspondance, mais certains
636         modules permettent de les utiliser de mani&egrave;re sp&eacute;ciale.</p>
637     </section>
638
639 </section>
640
641 <section id="sslrequire">
642     <title>Comparaison avec SSLRequire</title>
643     <p>La syntaxe <em>ap_expr</em> consiste principalement en une
644     surcouche de la syntaxe de la directive obsol&egrave;te <directive
645     module="mod_ssl">SSLRequire</directive>. Vous pouvez consulter la
646     liste de leur diff&eacute;rences dans la documentation de la directive
647     <directive module="mod_ssl">SSLRequire</directive>.</p>
648 </section>
649
650 <section id="compatibility">
651     <title>Historique de version</title>
652     <p>La <a href="#functions">fonction</a> <code>req_novary</code> est
653     disponible &agrave; partir de la version 2.4.4 du serveur HTTP Apache.</p>
654     <p>Les <a href="#vars">variables</a>
655     <code>SERVER_PROTOCOL_VERSION</code>,
656     <code>SERVER_PROTOCOL_VERSION_MAJOR</code> et
657     <code>SERVER_PROTOCOL_VERSION_MINOR</code> sont disponibles &agrave; partir
658     de la version 2.5.0 du serveur HTTP Apache.</p>
659 </section>
660
661 </manualpage>