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