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