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