1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5              This file is generated from xml source: DO NOT EDIT
6        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7      -->
8<title>Advanced Techniques with mod_rewrite - Serveur Apache HTTP</title>
9<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="/style/css/prettify.css" />
12<script src="/style/scripts/prettify.min.js" type="text/javascript">
13</script>
14
15<link href="/images/favicon.ico" rel="shortcut icon" /></head>
16<body id="manual-page"><div id="page-header">
17<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossaire</a> | <a href="/sitemap.html">Plan du site</a></p>
18<p class="apache">Serveur Apache HTTP Version 2.4</p>
19<img alt="" src="/images/feather.gif" /></div>
20<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
21<div id="path">
22<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Advanced Techniques with mod_rewrite</h1>
23<div class="toplang">
24<p><span>Langues Disponibles: </span><a href="/en/rewrite/advanced.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
25<a href="/fr/rewrite/advanced.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
26</div>
27
28
29<p>Ce document compl�te la <a href="/mod/mod_rewrite.html">documentation de r�f�rence</a> du
30    module <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>. Il pr�sente un certain nombre
31    de techniques avanc�es quant �
32    l'utilisation de mod_rewrite.</p>
33
34<div class="warning">Notez que la plupart des exemples ne fonctionneront
35pas en l'�tat dans la configuration particuli�re de votre serveur ; il
36est donc important de bien comprendre leur fonctionnement, plut�t que de
37simplement les copier/coller dans votre configuration.</div>
38
39</div>
40<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#sharding">Distribution de la charge entre plusieurs serveurs
41  d'arri�re-plan en fonction de l'adresse IP</a></li>
42<li><img alt="" src="/images/down.gif" /> <a href="#on-the-fly-content">R�g�neration de contenu � la vol�e</a></li>
43<li><img alt="" src="/images/down.gif" /> <a href="#load-balancing">R�partition de charge</a></li>
44<li><img alt="" src="/images/down.gif" /> <a href="#autorefresh">Actualisation automatique d'un document</a></li>
45<li><img alt="" src="/images/down.gif" /> <a href="#structuredhomedirs">R�pertoires Home structur�s</a></li>
46<li><img alt="" src="/images/down.gif" /> <a href="#redirectanchors">Redirection des ancrages</a></li>
47<li><img alt="" src="/images/down.gif" /> <a href="#time-dependent">R��criture d�pendant de l'heure</a></li>
48<li><img alt="" src="/images/down.gif" /> <a href="#setenvvars">D�finir des variables d'environnement en fonction de
49      certaines parties de l'URL</a></li>
50</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="/mod/mod_rewrite.html">Documentation du module</a></li><li><a href="intro.html">Introduction � mod_rewrite</a></li><li><a href="remapping.html">Redirection et remise en
51correspondance</a></li><li><a href="access.html">Contr�ler l'acc�s</a></li><li><a href="vhosts.html">serveurs virtuels</a></li><li><a href="proxy.html">serveurs mandataires</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</a></li><li><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></li></ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
52<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
53<div class="section">
54<h2><a name="sharding" id="sharding">Distribution de la charge entre plusieurs serveurs
55  d'arri�re-plan en fonction de l'adresse IP</a></h2>
56
57  
58
59  <dl>
60    <dt>Description :</dt>
61
62    <dd>
63      <p>La fragmentation ou "sharding" est une technique courante de
64      distribution de la charge du serveur ou de l'espace de stockage.
65      Quand on utilise cette m�thode, un serveur frontal utilise l'URL
66      pour r�partir de mani�re appropri�e les utilisateurs et objets
67      entre diff�rents serveurs d'arri�re-plan.</p>
68    </dd>
69
70    <dt>Solution :</dt>
71
72    <dd>
73      <p>On maintient une table de correspondance entre utilisateurs et
74      serveurs cibles dans des fichiers externes. Ces derniers se
75      pr�sentent comme suit :</p>
76
77<div class="example"><p><code>
78utilisateur1  serveur_physique_utilisateur1<br />
79utilisateur2  serveur_physique_utilisateur2<br />
80:      :
81</code></p></div>
82
83  <p>Tout ceci est enregistr� dans un fichier
84  <code>correspondances-utilisateurs-serveurs</code>. Le but est de
85  faire correspondre</p>
86
87<div class="example"><p><code>
88/u/utilisateur1/chemin
89</code></p></div>
90
91  <p>avec</p>
92
93<div class="example"><p><code>
94http://serveur_physique_utilisateur1/u/utilisateur/chemin
95</code></p></div>
96
97      <p>il n'est ainsi pas n�cessaire que tous les chemins URL soient
98      valides sur tous les serveurs physiques d'arri�re-plan. Le jeu de
99      r�gles suivant fait tout ceci pour nous, en s'appuyant sur les
100      fichiers de correspondances, en supposant que serveur0 est un
101      serveur par d�faut qui sera utilis� lorsqu'un utilisateur ne
102      poss�dera pas d'entr�e dans la table de correspondances :</p>
103
104<pre class="prettyprint lang-config">RewriteEngine on
105RewriteMap      users-to-hosts   txt:/path/to/map.users-to-hosts
106RewriteRule   ^/u/([^/]+)/?(.*)   http://${users-to-hosts:$1|server0}/u/$1/$2</pre>
107
108    </dd>
109  </dl>
110
111  <p>Voir la documentation de <code class="directive"><a href="/mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> pour une description plus
112  approfondie de la syntaxe de cette directive.</p>
113
114</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
115<div class="section">
116<h2><a name="on-the-fly-content" id="on-the-fly-content">R�g�neration de contenu � la vol�e</a></h2>
117
118  
119
120  <dl>
121    <dt>Description :</dt>
122
123    <dd>
124      <p>Nous voulons g�n�rer du contenu de mani�re dynamique, mais le
125      conserver de mani�re statique lorsqu'il a �t� g�n�r�. La r�gle
126      suivante v�rifie l'existence du fichier statique, et le g�n�re
127      s'il est absent. Les fichiers statiques peuvent �tre supprim�s
128      p�riodiquement si on le d�sire (par exemple via cron), et seront
129      r�g�n�r�s � la demande.</p>
130    </dd>
131
132    <dt>Solution :</dt>
133
134    <dd>
135      A cet effet, on utilise le jeu de r�gles suivant :
136
137<pre class="prettyprint lang-config"># Cet exemple n'est valable que dans un contexte de r�pertoire
138RewriteCond %{REQUEST_URI}   !-U
139RewriteRule ^(.+)\.html$          /regenerate_page.cgi   [PT,L]</pre>
140
141
142      <p>L'op�rateur <code>-U</code> permet de d�terminer si la cha�ne
143      de test (dans ce cas <code>REQUEST_URI</code>) est une URL valide.
144      Pour ce faire, il utilise une sous-requ�te. Si cette sous-requ�te
145      �choue, ou en d'autres termes, si la ressource demand�e n'existe pas,
146      cette r�gle invoque le programme CGI
147      <code>/regenerate_page.cgi</code> qui g�n�re la ressource
148      demand�e et la sauvegarde dans le r�pertoire des documents, de
149      fa�on � ce qu'une copie statique puisse �tre servie lors d'une
150      demande ult�rieure.</p>
151
152    <p>De cette fa�on, les documents qui ne sont pas mis � jour
153    r�guli�rement peuvent �tre servis sous une forme statique. Si ces
154    documents doivent �tre r�actualis�s, on peut les supprimer du
155    r�pertoire des documents, et ils seront ainsi r�g�n�r�s � la
156    prochaine demande.</p>
157    </dd>
158  </dl>
159
160</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
161<div class="section">
162<h2><a name="load-balancing" id="load-balancing">R�partition de charge</a></h2>
163
164  
165
166  <dl>
167    <dt>Description :</dt>
168
169    <dd>
170      <p>Nous voulons r�partir la charge de mani�re al�atoire entre
171      plusieurs serveurs en utilisant mod_rewrite.</p>
172    </dd>
173
174    <dt>Solution :</dt>
175
176    <dd>
177      <p>Pour y parvenir, nous allons utiliser la directive <code class="directive"><a href="/mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> et une liste de
178      serveurs.</p>
179
180<pre class="prettyprint lang-config">RewriteEngine on
181RewriteMap lb rnd:/path/to/serverlist.txt
182RewriteRule ^/(.*) http://${lb:serveurs}/$1 [P,L]</pre>
183
184
185<p><code>liste-serveurs.txt</code> contiendra la liste des serveurs :</p>
186
187<div class="example"><p><code>
188## liste-serveurs.txt<br />
189<br />
190serveurs un.example.com|deux.example.com|trois.example.com<br />
191</code></p></div>
192
193<p>Si vous voulez qu'un serveur se voit confier d'avantage de charge que
194les autres, faites le figurer plusieurs fois dans la liste.</p>
195
196   </dd>
197
198   <dt>Discussion</dt>
199   <dd>
200<p>Apache poss�de un module de r�partition de charge -
201<code class="module"><a href="/mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> - beaucoup plus souple et pr�sentant
202plus de fonctionnalit�s dans ce domaine que mod_rewrite.</p>
203   </dd>
204  </dl>
205
206</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
207<div class="section">
208<h2><a name="autorefresh" id="autorefresh">Actualisation automatique d'un document</a></h2>
209
210  
211
212  
213
214  <dl>
215    <dt>Description :</dt>
216
217    <dd>
218      <p>Lorsque nous cr�ons une page web complexe, ne serait-il pas
219	  souhaitable que le navigateur web actualise automatiquement la
220	  page chaque fois que nous en sauvegardons une nouvelle version
221	  � partir de notre �diteur ? Impossible ?</p>
222    </dd>
223
224    <dt>Solution :</dt>
225
226    <dd>
227      <p>Non ! Nous allons pour cela combiner la fonctionnalit� MIME
228	  multipart, la fonctionnalit� NPH du serveur web et la
229	  puissance de <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> pour la manipulation
230	  d'URLs. Tout d'abord, nous d�finissons une nouvelle
231	  fonctionnalit� pour les URLs : l'ajout de
232	  <code>:refresh</code> � toute URL fait que la 'page' est
233	  actualis�e chaque fois que la ressource est mise � jour dans
234	  le syst�me de fichiers.</p>
235
236<pre class="prettyprint lang-config">RewriteRule   ^(/[uge]/[^/]+/?.*):refresh  /interne/cgi/apache/nph-refresh?f=$</pre>
237
238
239      <p>Nous appelons maintenant cette URL</p>
240
241<div class="example"><p><code>
242/u/foo/bar/page.html:refresh
243</code></p></div>
244
245      <p>ce qui entra�ne en interne l'invocation de l'URL</p>
246
247<div class="example"><p><code>
248/interne/cgi/apache/nph-refresh?f=/u/foo/bar/page.html
249</code></p></div>
250
251      <p>Il ne reste plus qu'� �crire le script NPH-CGI. Bien que l'on
252	  �crive habituellement dans ces cas "laiss� � la charge du
253	  lecteur � titre d'exercice", ;-) je vous l'offre, aussi.</p>
254
255<pre class="prettyprint lang-perl">#!/sw/bin/perl
256##
257##  nph-refresh -- script NPH/CGI pour l'actualisation automatique de
258##  pages
259##  Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
260##
261$| = 1;
262
263#   �clate la variable QUERY_STRING
264@pairs = split( /&amp;/, $ENV{'QUERY_STRING'} );
265foreach $pair (@pairs) {
266    ( $name, $value ) = split( /=/, $pair );
267    $name =~ tr/A-Z/a-z/;
268    $name = 'QS_' . $name;
269    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
270    eval "\$$name = \"$value\"";
271}
272$QS_s = 1    if ( $QS_s eq '' );
273$QS_n = 3600 if ( $QS_n eq '' );
274if ( $QS_f eq '' ) {
275    print "HTTP/1.0 200 OK\n";
276    print "Content-type: text/html\n\n";
277    print "&lt;b&gt;ERROR&lt;/b&gt;: No file given\n";
278    exit(0);
279}
280if ( !-f $QS_f ) {
281    print "HTTP/1.0 200 OK\n";
282    print "Content-type: text/html\n\n";
283    print "&lt;b&gt;ERROR&lt;/b&gt;: File $QS_f not found\n";
284    exit(0);
285}
286
287sub print_http_headers_multipart_begin {
288    print "HTTP/1.0 200 OK\n";
289    $bound = "ThisRandomString12345";
290    print "Content-type: multipart/x-mixed-replace;boundary=$bound\n";
291    &amp;print_http_headers_multipart_next;
292}
293
294sub print_http_headers_multipart_next {
295    print "\n--$bound\n";
296}
297
298sub print_http_headers_multipart_end {
299    print "\n--$bound--\n";
300}
301
302sub displayhtml {
303    local ($buffer) = @_;
304    $len = length($buffer);
305    print "Content-type: text/html\n";
306    print "Content-length: $len\n\n";
307    print $buffer;
308}
309
310sub readfile {
311    local ($file) = @_;
312    local ( *FP, $size, $buffer, $bytes );
313    ( $x, $x, $x, $x, $x, $x, $x, $size ) = stat($file);
314    $size = sprintf( "%d", $size );
315    open( FP, "&lt;$file" );
316    $bytes = sysread( FP, $buffer, $size );
317    close(FP);
318    return $buffer;
319}
320
321$buffer = &amp;readfile($QS_f);
322&amp;print_http_headers_multipart_begin;
323&amp;displayhtml($buffer);
324
325sub mystat {
326    local ($file) = $_[0];
327    local ($time);
328
329    ( $x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime ) = stat($file);
330    return $mtime;
331}
332
333$mtimeL = &amp;mystat($QS_f);
334$mtime  = $mtime;
335for ( $n = 0 ; $n &amp; lt ; $QS_n ; $n++ ) {
336    while (1) {
337        $mtime = &amp;mystat($QS_f);
338        if ( $mtime ne $mtimeL ) {
339            $mtimeL = $mtime;
340            sleep(2);
341            $buffer = &amp;readfile($QS_f);
342            &amp;print_http_headers_multipart_next;
343            &amp;displayhtml($buffer);
344            sleep(5);
345            $mtimeL = &amp;mystat($QS_f);
346            last;
347        }
348        sleep($QS_s);
349    }
350}
351
352&amp;print_http_headers_multipart_end;
353
354exit(0);
355
356##EOF##</pre>
357
358    </dd>
359  </dl>
360
361</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
362<div class="section">
363<h2><a name="structuredhomedirs" id="structuredhomedirs">R�pertoires Home structur�s</a></h2>
364
365  
366
367  <dl>
368    <dt>Description :</dt>
369
370    <dd>
371      <p>Certains sites avec des milliers d'utilisateurs organisent
372	  les r�pertoires utilisateurs de mani�re structur�e, c'est �
373	  dire que chaque r�pertoire utilisateur se trouve dans un
374	  sous-r�pertoire dont le nom commence (par exemple) par le
375	  premier caract�re du nom de l'utilisateur. Ainsi,
376	  <code>/~larry/chemin</code> correspond �
377	  <code>/home/<strong>l</strong>/larry/public_html/chemin</code>, alors
378	  que <code>/~waldo/chemin</code> correspond �
379	  <code>/home/<strong>w</strong>/waldo/public_html/chemin</code>.</p>
380    </dd>
381
382    <dt>Solution :</dt>
383
384    <dd>
385      <p>On utilise le jeu de r�gles suivant pour d�velopper les
386	  URLs avec tilde selon l'organisation structur�e pr�c�dente.</p>
387
388<pre class="prettyprint lang-config">RewriteEngine on
389RewriteRule   ^/~(<strong>([a-z])</strong>[a-z0-9]+)(.*)  /home/<strong>$2</strong>/$1/public_html$3</pre>
390
391    </dd>
392  </dl>
393
394</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
395<div class="section">
396<h2><a name="redirectanchors" id="redirectanchors">Redirection des ancrages</a></h2>
397
398  
399
400  <dl>
401    <dt>Description :</dt>
402
403    <dd>
404    <p>Par d�faut, la redirection vers un ancrage HTML ne fonctionne
405	pas, car mod_rewrite �chappe le caract�re <code>#</code> en le
406	transformant en <code>%23</code>, ce qui rend la redirection
407	inop�rante.</p>
408    </dd>
409
410    <dt>Solution :</dt>
411
412    <dd>
413      <p>On utilise le drapeau <code>[NE]</code> dans la r�gle
414	  <code>RewriteRule</code>. NE signifie "No Escape".
415      </p>
416    </dd>
417
418    <dt>Discussion :</dt>
419    <dd>Cette technique fonctionne bien entendu pour tout autre
420    caract�re sp�cial que mod_rewrite, par d�faut, code pour insertion
421    dans une URL.</dd>
422  </dl>
423
424</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
425<div class="section">
426<h2><a name="time-dependent" id="time-dependent">R��criture d�pendant de l'heure</a></h2>
427
428  
429
430  <dl>
431    <dt>Description :</dt>
432
433    <dd>
434      <p>Nous voulons servir des contenus diff�rents selon l'heure du
435      jour en utilisant mod_rewrite.</p>
436    </dd>
437
438    <dt>Solution :</dt>
439
440    <dd>
441      <p>Il existe de nombreuses variables nomm�es
442	  <code>TIME_xxx</code> utilisables dans les conditions de
443	  r��criture. Utilis�es en conjonction avec les mod�les de
444	  comparaison lexicographique sp�ciaux <code>&lt;STRING</code>,
445	  <code>&gt;STRING</code> et <code>=STRING</code>, elles
446	  permettent d'effectuer des redirections d�pendant de
447	  l'heure :</p>
448
449<pre class="prettyprint lang-config">+RewriteEngine on
450+RewriteCond   %{TIME_HOUR}%{TIME_MIN} &gt;0700
451+RewriteCond   %{TIME_HOUR}%{TIME_MIN} &lt;1900
452+RewriteRule   ^foo\.html$             foo.day.html [L]</pre>
453
454
455      <p>Avec cet exemple, l'URL <code>foo.html</code> renvoie
456	  le contenu de <code>foo.jour.html</code> durant le
457	  cr�neau horaire <code>07:01-18:59</code>, et le contenu de
458	  <code>foo.nuit.html</code> le reste du temps.</p>
459
460      <div class="warning"><code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>, les mandataires
461	interm�diaires et les navigateurs peuvent chacun mettre en cache
462	les r�ponses et ainsi afficher une des deux pages en dehors de
463	la fen�tre de temps configur�e. On peut utiliser
464	<code class="module"><a href="/mod/mod_expires.html">mod_expires</a></code> pour contourner ce probl�me. Il est
465	cependant bien plus commode de servir un contenu dynamique, et
466	de le personnaliser en fonction de l'heure du jour.</div>
467    </dd>
468  </dl>
469
470</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
471<div class="section">
472<h2><a name="setenvvars" id="setenvvars">D�finir des variables d'environnement en fonction de
473      certaines parties de l'URL</a></h2>
474
475  
476
477  <dl>
478    <dt>Description :</dt>
479
480    <dd>
481      <p>Ici, nous voulons conserver une certaine forme de statut
482      lorsqu'une r��criture a eu lieu. Par exemple, vous souhaitez
483      consigner le fait que cette r��criture a eu lieu, et vous servir
484      plus tard de cette information pour d�terminer si une requ�te sera
485      concern�e par cette r��criture. Pour y parvenir, on peut utiliser
486      une variable d'environnement.</p>
487    </dd>
488
489    <dt>Solution :</dt>
490
491    <dd>
492      <p>Utiliser le drapeau [E] pour d�finir une variable
493      d'environnement.</p>
494
495<pre class="prettyprint lang-config">RewriteEngine on
496RewriteRule   ^/cheval/(.*)   /poney/$1 [E=<strong>rewritten:1</strong>]</pre>
497
498
499    <p>Plus loin dans votre jeu de r�gles, vous pouvez v�rifier le
500    contenu de cette variable d'environnement via une directive
501    RewriteCond :</p>
502
503<pre class="prettyprint lang-config">RewriteCond %{ENV:rewritten} =1</pre>
504
505
506    </dd>
507  </dl>
508
509</div></div>
510<div class="bottomlang">
511<p><span>Langues Disponibles: </span><a href="/en/rewrite/advanced.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
512<a href="/fr/rewrite/advanced.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
513</div><div class="top"><a href="#page-header"><img src="/images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
514<script type="text/javascript"><!--//--><![CDATA[//><!--
515var comments_shortname = 'httpd';
516var comments_identifier = 'http://httpd.apache.org/docs/2.4/rewrite/advanced.html';
517(function(w, d) {
518    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
519        d.write('<div id="comments_thread"><\/div>');
520        var s = d.createElement('script');
521        s.type = 'text/javascript';
522        s.async = true;
523        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
524        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
525    }
526    else { 
527        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
528    }
529})(window, document);
530//--><!]]></script></div><div id="footer">
531<p class="apache">Copyright 2014 The Apache Software Foundation.<br />Autoris� sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
532<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossaire</a> | <a href="/sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
533if (typeof(prettyPrint) !== 'undefined') {
534    prettyPrint();
535}
536//--><!]]></script>
537</body></html>