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>Redirection et remise en correspondance avec 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>Redirection et remise en correspondance avec mod_rewrite</h1>
23<div class="toplang">
24<p><span>Langues Disponibles: </span><a href="/en/rewrite/remapping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
25<a href="/fr/rewrite/remapping.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
26</div>
27
28
29<p>Ce document est un compl�ment � la <a href="/mod/mod_rewrite.html">Documentation de r�f�rence</a> de
30<code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>. Il montre comment utiliser
31<code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> pour rediriger et remettre en
32correspondance une requ�te. Il contient de
33nombreux exemples d'utilisation courante de mod_rewrite avec une
34description d�taill�e de leur fonctionnement.</p>
35
36<div class="warning">Vous devez vous attacher � comprendre le
37fonctionnement des exemples, car la plupart d'entre eux ne
38fonctionneront pas sur votre syst�me si vous vous contentez de les
39copier/coller dans vos fichiers de configuration.</div>
40
41</div>
42<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#old-to-new">De l'ancienne � la nouvelle URL (en interne)</a></li>
43<li><img alt="" src="/images/down.gif" /> <a href="#old-to-new-extern">De l'ancien au nouveau (en externe)</a></li>
44<li><img alt="" src="/images/down.gif" /> <a href="#movehomedirs">Ressource d�plac�e vers un autre serveur</a></li>
45<li><img alt="" src="/images/down.gif" /> <a href="#static-to-dynamic">De statique � dynamique</a></li>
46<li><img alt="" src="/images/down.gif" /> <a href="#backward-compatibility">Compatibilit� ascendante dans le cadre d'une modification
47      d'extension de nom de fichier</a></li>
48<li><img alt="" src="/images/down.gif" /> <a href="#canonicalhost">Noms d'h�tes canoniques</a></li>
49<li><img alt="" src="/images/down.gif" /> <a href="#multipledirs">Recherche de pages dans plus d'un r�pertoire</a></li>
50<li><img alt="" src="/images/down.gif" /> <a href="#archive-access-multiplexer">Redirection vers des serveurs g�ographiquement distribu�s</a></li>
51<li><img alt="" src="/images/down.gif" /> <a href="#browser-dependent-content">Contenu d�pendant du navigateur</a></li>
52<li><img alt="" src="/images/down.gif" /> <a href="#canonicalurl">URLs canoniques</a></li>
53<li><img alt="" src="/images/down.gif" /> <a href="#moveddocroot">D�placement du r�pertoire <code>DocumentRoot</code></a></li>
54<li><img alt="" src="/images/down.gif" /> <a href="#fallback-resource">Ressource par d�faut</a></li>
55</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="/mod/mod_rewrite.html">Documentation du module mod_rewrite</a></li><li><a href="intro.html">Introduction � mod_rewrite</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="advanced.html">Techniques avanc�es</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>
56<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
57<div class="section">
58<h2><a name="old-to-new" id="old-to-new">De l'ancienne � la nouvelle URL (en interne)</a></h2>
59
60      
61
62      <dl>
63        <dt>Description :</dt>
64
65        <dd>
66          <p>Supposons que nous ayons r�cemment renomm� la page
67	  <code>foo.html</code> en <code>bar.html</code>, et voulions
68	  maintenant que l'ancienne URL soit toujours valide � des fins
69	  de compatibilit� ascendante. En fait, on voudrait que le
70	  changement de nom soit transparent aux utilisateurs de
71	  l'ancienne URL.</p>
72        </dd>
73
74        <dt>Solution :</dt>
75
76        <dd>
77          <p>On r��crit l'ancienne URL en interne vers la nouvelle via
78	  la r�gle suivante :</p>
79
80<pre class="prettyprint lang-config">RewriteEngine  on
81RewriteRule    ^<strong>/foo</strong>\.html$  <strong>/bar</strong>.html [PT]</pre>
82
83    </dd>
84  </dl>
85
86</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
87<div class="section">
88<h2><a name="old-to-new-extern" id="old-to-new-extern">De l'ancien au nouveau (en externe)</a></h2>
89
90      
91
92      <dl>
93        <dt>Description :</dt>
94
95        <dd>
96          <p>Supposons toujours que nous ayons r�cemment renomm� la page
97	  <code>foo.html</code> en <code>bar.html</code>, et voulions
98	  maintenant que l'ancienne URL soit toujours valide � des fins
99	  de compatibilit� ascendante. En revanche, nous voulons cette
100	  fois que la nouvelle URL soit sugg�r�e aux utilisateurs de
101	  l'ancienne URL, c'est � dire que l'adresse vue depuis leur
102	  navigateur doit �galement �tre modifi�e.</p>
103        </dd>
104
105        <dt>Solution :</dt>
106
107        <dd>
108          <p>On force une redirection HTTP vers la nouvelle URL, ce qui
109	  entra�ne une modification de celle du navigateur et aussi de ce
110	  que voit l'utilisateur :</p>
111
112<pre class="prettyprint lang-config">RewriteEngine  on
113RewriteRule    ^<strong>foo</strong>\.html$  <strong>bar</strong>.html  [<strong>R</strong>]</pre>
114
115</dd>
116
117<dt>Discussion</dt>
118
119    <dd>
120    <p>Dans l'exemple <a href="#old-to-new-intern">interne</a>, on a utilis� mod_rewrite afin
121    de dissimuler la redirection au client. Dans cet exemple, en
122    revanche, on aurait pu se contenter d'une directive Redirect :</p>
123
124    <pre class="prettyprint lang-config">Redirect /foo.html /bar.html</pre>
125
126
127    </dd>
128  </dl>
129
130</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
131<div class="section">
132<h2><a name="movehomedirs" id="movehomedirs">Ressource d�plac�e vers un autre serveur</a></h2>
133
134  
135
136  <dl>
137    <dt>Description :</dt>
138
139    <dd>
140      <p>Si une ressource a �t� d�plac�e vers un autre serveur, vous
141      pouvez faire en sorte que les URLs de l'ancien serveur continuent
142      de fonctionner pendant un certain temps, afin de laisser au
143      utilisateurs le temps de modifier leurs favoris.</p>
144    </dd>
145
146    <dt>Solution :</dt>
147
148    <dd>
149      <p>Vous pouvez utiliser <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> pour
150      rediriger ces URLs vers le nouveau serveur, mais vous pouvez aussi
151      utiliser les directives Redirect ou RedirectMatch.</p>
152
153<pre class="prettyprint lang-config">#Avec mod_rewrite
154RewriteEngine on
155RewriteRule   ^/docs/(.+)  http://nouveau.example.com/docs/$1  [R,L]</pre>
156
157
158<pre class="prettyprint lang-config">#Avec RedirectMatch
159RedirectMatch ^/docs/(.*) http://nouveau.example.com/docs/$1</pre>
160
161
162<pre class="prettyprint lang-config">#Avec Redirect
163Redirect /docs/ http://nouveau.example.com/docs/</pre>
164
165    </dd>
166  </dl>
167
168</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
169<div class="section">
170<h2><a name="static-to-dynamic" id="static-to-dynamic">De statique � dynamique</a></h2>
171
172      
173
174      <dl>
175        <dt>Description :</dt>
176
177        <dd>
178          <p>Comment transformer une page statique <code>foo.html</code>
179	  en sa variante dynamique <code>foo.cgi</code> de mani�re
180	  transparente, c'est � dire sans en avertir le
181	  navigateur/utilisateur.</p>
182        </dd>
183
184        <dt>Solution :</dt>
185
186        <dd>
187          <p>On r��crit simplement l'URL en script CGI et force le
188	  gestionnaire de contenu � <strong>cgi-script</strong> de fa�on
189	  � ce que le script s'ex�cute en tant que programme CGI.
190	  Ainsi, une requ�te vers <code>/~quux/foo.html</code> conduit
191	  en interne � l'invocation de
192	  <code>/~quux/foo.cgi</code>.</p>
193
194<pre class="prettyprint lang-config">RewriteEngine  on
195RewriteBase    /~quux/
196RewriteRule    ^foo\.html$  foo.cgi � [H=<strong>cgi-script</strong>]</pre>
197
198        </dd>
199      </dl>
200
201    </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
202<div class="section">
203<h2><a name="backward-compatibility" id="backward-compatibility">Compatibilit� ascendante dans le cadre d'une modification
204      d'extension de nom de fichier</a></h2>
205
206      
207
208      <dl>
209        <dt>Description :</dt>
210
211        <dd>
212          <p>Comment conf�rer une compatibilit� ascendante aux URLs
213	  (existant encore virtuellement) apr�s avoir migr�
214	  <code>document.YYYY</code> vers <code>document.XXXX</code>,
215	  c'est � dire apr�s avoir par exemple traduit un lot de
216	  fichiers <code>.html</code> en fichiers <code>.php</code>
217	  ?</p>
218        </dd>
219
220        <dt>Solution :</dt>
221
222        <dd>
223          <p>On r��crit simplement le nom du fichier en son nom
224	  de base et v�rifie s'il existe aussi avec la nouvelle
225	  extension. Si c'est le cas, on utilise ce nom, sinon on
226	  r��crit l'URL sous sa forme originale.</p>
227
228
229<pre class="prettyprint lang-config">#   jeu de r�gles assurant une compatibilit� ascendante en r��crivant<br />
230#   document.html en document.php si et seulement si document.php<br />
231#   existe
232&lt;Directory /var/www/htdocs&gt;
233    RewriteEngine on
234    RewriteBase /var/www/htdocs
235
236    RewriteCond $1.php -f
237    RewriteCond $1.html !-f
238    RewriteRule ^(.*).html$ $1.php
239&lt;/Directory&gt;</pre>
240
241    </dd>
242
243    <dt>Discussion</dt>
244    <dd>
245    <p>Cet exemple utilise une fonctionnalit� souvent m�connue de
246    mod_rewrite, en tirant avantage de l'ordre d'ex�cution du jeu de
247    r�gles. En particulier, mod_rewrite �value la partie gauche des
248    r�gles de r��criture avant d'�valuer les directives RewriteCond. En
249    cons�quence, $1 est d�j� d�fini au moment o� les directives
250    RewriteCond sont �valu�es. Ceci nous permet de tester l'existence du
251    fichier original (<code>document.html</code>) et du fichier cible
252    (<code>document.php</code>) en utilisant le m�me nom de base.</p>
253
254    <p>Ce jeu de r�gles est con�u pour une utilisation dans un contexte
255    de r�pertoire (au sein d'une section &lt;Directory&gt; ou d'un
256    fichier .htaccess), de fa�on � ce que les v�rifications
257    <code>-f</code> effectuent leurs recherches dans le bon r�pertoire.
258    Vous serez peut-�tre amen� � d�finir une directive <code class="directive"><a href="/mod/mod_rewrite.html#rewritebase">RewriteBase</a></code> pour sp�cifier le
259    r�pertoire de base � partir duquel vous travaillez.</p>
260    </dd>
261  </dl>
262
263</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
264<div class="section">
265<h2><a name="canonicalhost" id="canonicalhost">Noms d'h�tes canoniques</a></h2>
266
267
268
269      <dl>
270        <dt>Description :</dt>
271
272        <dd>Le but de cette r�gle est de pr�f�rer l'utilisation d'un nom
273	d'h�te particulier � d'autres noms d'h�te utilisables
274	pour atteindre le m�me site. Par exemple, si vous voulez
275	utiliser <strong>www.example.com</strong> � la place de
276	<strong>example.com</strong>, vous pouvez utiliser une solution
277	du style :</dd>
278
279        <dt>Solution :</dt>
280
281        <dd>
282
283<p>Pour y parvenir, il vaut mieux se passer de mod_rewrite, et utiliser
284plut�t la directive <code class="directive"><a href="/mod/mod_alias.html#redirect">Redirect</a></code> dans
285une section de serveur virtuel pour le/les noms d'h�te non canoniques.</p>
286
287<pre class="prettyprint lang-config">&lt;VirtualHost *:80&gt;
288  ServerName undesired.example.com
289  ServerAlias example.com notthis.example.com
290
291  Redirect / http://www.example.com/
292&lt;/VirtualHost&gt;
293
294&lt;VirtualHost *:80&gt;
295  ServerName www.example.com
296&lt;/VirtualHost&gt;</pre>
297
298
299<p>Vous pouvez aussi utiliser la directive <code class="directive"><a href="/mod/core.html#if">&lt;If&gt;</a></code> :</p>
300
301<pre class="prettyprint lang-config">&lt;If "%{HTTP_HOST} != 'www.example.com'"&gt;
302	Redirect / http://www.example.com/
303&lt;/If&gt;</pre>
304
305
306<p>Ou, par exemple, pour rediriger une portion de votre site vers HTTPS
307:</p>
308
309<pre class="prettyprint lang-config">&lt;If "%{SERVER_PROTOCOL} != 'HTTPS'"&gt;
310	Redirect /admin/ https://www.example.com/admin/
311&lt;/If&gt;</pre>
312
313
314<p>Si, pour une raison particuli�re, vous voulez tout de m�me utiliser
315<code>mod_rewrite</code> - dans le cas, par exemple, o� vous avez besoin
316d'un jeu plus important de r�gles de r��critures - vous pouvez utiliser
317la recette suivante :</p>
318
319<p>Pour les sites �coutant sur un port autre que 80:</p>
320<pre class="prettyprint lang-config">RewriteCond %{HTTP_HOST}   !^www\.example\.com [NC]
321RewriteCond %{HTTP_HOST}   !^$
322RewriteCond %{SERVER_PORT} !^80$
323RewriteRule ^/?(.*)         http://www.example.com:%{SERVER_PORT}/$1 [L,R,NE]</pre>
324
325
326<p>Et pour un site �coutant sur le port 80</p>
327<pre class="prettyprint lang-config">RewriteCond %{HTTP_HOST}   !^www\.example\.com [NC]
328RewriteCond %{HTTP_HOST}   !^$
329RewriteRule ^/?(.*)         http://www.example.com/$1 [L,R,NE]</pre>
330
331	<p>
332	Si vous souhaitez que cette r�gle s'applique � tous les noms de
333	domaine - en d'autres termes, si vous voulez rediriger
334	<strong>example.com</strong> vers
335	<strong>www.example.com</strong> pour toutes les valeurs
336	possibles de <strong>example.com</strong>, vous pouvez utiliser
337	le jeu de r�gles suivants :</p>
338
339<pre class="prettyprint lang-config">RewriteCond %{HTTP_HOST} !^www\. [NC]
340RewriteCond %{HTTP_HOST} !^$
341RewriteRule ^/?(.*) http://www.%{HTTP_HOST}/$1 [L,R,NE]</pre>
342
343	<p>
344	Vous pouvez utiliser ce jeu de r�gles aussi bien dans le fichier
345	de configuration de votre serveur principal que dans un fichier
346	<code>.htaccess</code> plac� dans le r�pertoire d�fini par la
347	directive <code class="directive"><a href="/mod/core.html#documentroot">DocumentRoot</a></code> du serveur.</p>
348        </dd>
349      </dl>
350
351    </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
352<div class="section">
353<h2><a name="multipledirs" id="multipledirs">Recherche de pages dans plus d'un r�pertoire</a></h2>
354
355  
356
357  <dl>
358    <dt>Description:</dt>
359
360    <dd>
361      <p>Une ressource peut exister dans plusieurs r�pertoires, et nous
362      voulons rechercher cette ressource dans ces r�pertoires
363      lorsqu'elle fait l'objet d'une requ�te. Il est possible que nous
364      ayons r�cemment r�organis� la structure de notre site en
365      r�partissant son contenu dans plusieurs r�pertoires.</p>
366    </dd>
367
368    <dt>Solution :</dt>
369
370    <dd>
371      <p>Le jeu de r�gles suivant recherche la ressource dans deux
372      r�pertoires, et s'il ne la trouve dans aucun des deux, il tentera
373      simplement de la servir � partir de l'adresse fournie dans la
374      requ�te.</p>
375
376<pre class="prettyprint lang-config">RewriteEngine on
377
378#   on cherche tout d'abord dans dir1/...
379#   ... et si on trouve, on est content et on arr�te :
380RewriteCond         %{DOCUMENT_ROOT}/<strong>dir1</strong>/%{REQUEST_URI}  -f
381RewriteRule  ^(.+)  %{DOCUMENT_ROOT}/<strong>dir1</strong>/$1  [L]
382
383#   on cherche ensuite dans dir2/...
384#   ... et si on trouve, on est content et on arr�te :
385RewriteCond         %{DOCUMENT_ROOT}/<strong>dir2</strong>/%{REQUEST_URI}  -f
386RewriteRule  ^(.+)  %{DOCUMENT_ROOT}/<strong>dir2</strong>/$1  [L]
387
388#   sinon, on continue la recherche avec d'autres directives Alias
389#   ou ScriptAlias, etc...
390RewriteRule   ^  -  [PT]</pre>
391
392        </dd>
393      </dl>
394
395    </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
396<div class="section">
397<h2><a name="archive-access-multiplexer" id="archive-access-multiplexer">Redirection vers des serveurs g�ographiquement distribu�s</a></h2>
398
399  
400
401  <dl>
402    <dt>Description :</dt>
403
404    <dd>
405    <p>Notre site web poss�de de nombreux miroirs, et nous voulons
406    rediriger les utilisateurs vers celui qui se situe dans le pays o�
407    ils se trouvent. </p>
408    </dd>
409
410    <dt>Solution :</dt>
411
412    <dd>
413    <p>En consultant le nom d'h�te du client demandeur, on d�termine le
414    pays dans lequel il se trouve. S'il est impossible d'effectuer une
415    recherche sur leur adresse IP, on se rabat sur un serveur par
416    d�faut.</p>
417    <p>Nous allons utiliser une directive <code class="directive"><a href="/mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> afin de construire une
418    liste des serveurs que nous voulons utiliser.</p>
419
420<pre class="prettyprint lang-config">HostnameLookups on
421RewriteEngine on
422RewriteMap    multiplex         txt:/path/to/map.mirrors
423RewriteCond  %{REMOTE_HOST}     ([a-z]+)$ [NC]
424RewriteRule   ^/(.*)$  ${multiplex:<strong>%1</strong>|http://www.example.com/}$1  [R,L]</pre>
425
426
427<div class="example"><p><code>
428##  liste_miroirs -- Table de correspondance pays - serveurs<br />
429<br />
430de        http://www.exemple.de/<br />
431uk        http://www.exemple.uk/<br />
432com       http://www.example.com/<br />
433##EOF##
434</code></p></div>
435    </dd>
436
437    <dt>Discussion</dt>
438    <dd>
439    <div class="warning">Ce jeu de r�gles n�cessite la d�finition �
440    <code>on</code> de la directive <code class="directive"><a href="/mod/core.html#hostnamelookups">HostNameLookups</a></code>, ce qui peut induire une
441    baisse de performance significative.</div>
442
443    <p>La directive <code class="directive"><a href="/mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> extrait la derni�re
444    partie du nom d'h�te du client demandeur - le code du pays - et la
445    r�gle de r��criture qui suit utilise cette valeur pour rechercher le
446    serveur miroir appropri� dans le fichier de correspondances.</p>
447    </dd>
448  </dl>
449
450</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
451<div class="section">
452<h2><a name="browser-dependent-content" id="browser-dependent-content">Contenu d�pendant du navigateur</a></h2>
453
454      
455
456      <dl>
457        <dt>Description :</dt>
458
459        <dd>
460          <p>Nous voulons fournir des contenus diff�rents en fonction du
461	  navigateur (user-agent) qui effectue la requ�te.</p>
462        </dd>
463
464        <dt>Solution :</dt>
465
466        <dd>
467          <p>Nous devons d�terminer quel contenu servir, en nous basant
468	  sur l'en-t�te HTTP "User-Agent". La
469	  configuration suivante effectue ceci : si l'en-t�te HTTP
470	  "User-Agent" commence par "Mozilla/3", le nom de la page
471	  <code>foo.html</code> est r��crit en <code>foo.NS.html</code>
472	  et la r��criture s'arr�te. Si le navigateur est "Lynx" ou
473	  "Mozilla" version 1 ou 2, l'URL devient
474	  <code>foo.20.html</code>. Tous les autres navigateurs
475	  re�oivent la page <code>foo.32.html</code>. Tout ceci est
476	  effectu� par le jeu de r�gles suivant :</p>
477<pre class="prettyprint lang-config">RewriteCond %{HTTP_USER_AGENT}  ^<strong>Mozilla/3</strong>.*
478RewriteRule ^foo\.html$         foo.<strong>NS</strong>.html          [<strong>L</strong>]
479
480RewriteCond %{HTTP_USER_AGENT}  ^Lynx/ [OR]
481RewriteCond %{HTTP_USER_AGENT}  ^Mozilla/[12]
482RewriteRule ^foo\.html$         foo.<strong>20</strong>.html          [<strong>L</strong>]
483
484RewriteRule ^foo\.html$         foo.<strong>32</strong>.html          [<strong>L</strong>]</pre>
485
486        </dd>
487      </dl>
488
489    </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
490<div class="section">
491<h2><a name="canonicalurl" id="canonicalurl">URLs canoniques</a></h2>
492
493
494
495<dl>
496 <dt>Description :</dt>
497
498   <dd>
499     <p>Sur certains serveurs, une ressource peut poss�der plusieurs
500     URLs. Il y a en g�n�ral les URLs canoniques (celles qui sont
501     r�ellement distribu�es et utilis�es), et celles qui correspondent �
502     des raccourcis, les URLs internes, etc... Quelle que soit l'adresse
503     que l'utilisateur fournit dans la requ�te, il devrait finalement
504     voir l'URL canonique dans la barre d'adresse de son navigateur.</p>
505   </dd>
506
507   <dt>Solution :</dt>
508
509     <dd>
510       <p>Nous effectuons une redirection HTTP externe pour toutes les
511       URLs non canoniques afin de les corriger dans la barre d'adresse
512       du navigateur, et ceci pour toutes les requ�tes futures. Dans le
513       jeu de r�gles suivant, nous rempla�ons <code>/matous</code> et
514       <code>/minettes</code> par le canonique <code>/chats</code>.</p>
515
516	<pre class="prettyprint lang-config">RewriteRule   ^/(matous|minettes)/(.*)    /chats/$2  [R]</pre>
517
518        </dd>
519
520     <dt>Discussion :</dt>
521     <dd>On serait mieux inspir� d'utiliser ici les directives Redirect ou
522     RedirectMatch :
523
524     <pre class="prettyprint lang-config">RedirectMatch ^/(matous|minettes)/(.*) /chats/$2</pre>
525
526     </dd>
527      </dl>
528
529</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
530<div class="section">
531<h2><a name="moveddocroot" id="moveddocroot">D�placement du r�pertoire <code>DocumentRoot</code></a></h2>
532
533  
534
535  <dl>
536    <dt>Description :</dt>
537
538    <dd>
539<p>En g�n�ral, le r�pertoire <code class="directive"><a href="/mod/core.html#documentroot">DocumentRoot</a></code> du serveur web correspond � l'URL
540"<code>/</code>". Ce r�pertoire ne contient cependant pas forc�ment des
541ressources de premi�re importance pour l'utilisateur. Par exemple, vous
542pr�f�rerez peut-�tre que le r�pertoire d'accueil d'un visiteur acc�dant
543pour la premi�re fois � votre site soit un r�pertoire particulier
544<code>/a-propos-de/</code>. Pour y parvenir, utilisez le jeu de r�gles
545suivant :</p>
546</dd>
547
548    <dt>Solution :</dt>
549
550    <dd>
551      <p>On redirige l'URL <code>/</code> vers
552      <code>/a-propos-de/</code> :
553      </p>
554
555<pre class="prettyprint lang-config">RewriteEngine on
556RewriteRule   ^/$  /a-propos-de/  [<strong>R</strong>]</pre>
557
558
559<p>Notez que l'on peut aussi y parvenir en utilisant la directive
560<code class="directive"><a href="/mod/mod_alias.html#redirectmatch">RedirectMatch</a></code> :</p>
561
562<pre class="prettyprint lang-config">RedirectMatch ^/$
563http://example.com/a-propos-de/</pre>
564
565
566<p>Notez aussi que cet exemple ne r��crit que l'URL racine. En d'autres
567termes, il r��crit une requ�te pour <code>http://example.com/</code>,
568mais pas pour une requ�te <code>http://example.com/page.html</code>. Si
569vous avez effectivement modifi� la racine de vos documents - c'est � dire
570si <strong>tous</strong> vos contenus se trouvent dans un
571sous-r�pertoire, il est largement pr�f�rable de modifier simplement
572votre directive <code class="directive"><a href="/mod/core.html#documentroot">DocumentRoot</a></code>, ou de
573d�placer l'ensemble du contenu vers le r�pertoire sup�rieur, plut�t que
574de r��crire les URLs.</p>
575</dd>
576</dl>
577
578</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
579<div class="section">
580<h2><a name="fallback-resource" id="fallback-resource">Ressource par d�faut</a></h2>
581
582
583<dl>
584<dt>Description :</dt>
585<dd>Vous voulez qu'une seule ressource (disons un certain fichier tel
586que index.php) soit servie pour toutes les requ�tes � destination d'un
587certain r�pertoire, sauf pour celles qui concernent une ressource
588existant effectivement comme une image, ou un fichier css.</dd>
589
590<dt>Solution :</dt>
591<dd>
592<p>Depuis la version 2.2.16, vous pouvez y parvenir via la directive
593<code class="directive"><a href="/mod/mod_dir.html#fallbackresource">FallbackResource</a></code> :</p>
594
595<pre class="prettyprint lang-config">&lt;Directory /var/www/my_blog&gt;
596  FallbackResource index.php
597&lt;/Directory&gt;</pre>
598
599
600<p>Cependant, si vos besoins �taient plus complexes, vous pouviez, dans
601les versions plus anciennes d'Apache, utiliser un jeu de r�gles du style
602:</p>
603
604<pre class="prettyprint lang-config">&lt;Directory /var/www/my_blog&gt;
605  RewriteBase /my_blog
606
607  RewriteCond /var/www/my_blog/%{REQUEST_FILENAME} !-f
608  RewriteCond /var/www/my_blog/%{REQUEST_FILENAME} !-d
609  RewriteRule ^ index.php [PT]
610&lt;/Directory&gt;</pre>
611
612
613<p>D'autre part, si vous voulez transmettre l'URI de la requ�te en tant
614que cha�ne de param�tres � index.php, vous pouvez remplacer cette r�gle
615de r��criture par :</p>
616
617<pre class="prettyprint lang-config">RewriteRule (.*) index.php?$1 [PT,QSA]</pre>
618
619
620<p>Notez que l'on peut utiliser ces jeux de r�gles aussi bien dans un
621fichier <code>.htaccess</code> que dans une section
622&lt;Directory&gt;.</p>
623
624</dd>
625
626</dl>
627
628</div></div>
629<div class="bottomlang">
630<p><span>Langues Disponibles: </span><a href="/en/rewrite/remapping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
631<a href="/fr/rewrite/remapping.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
632</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>
633<script type="text/javascript"><!--//--><![CDATA[//><!--
634var comments_shortname = 'httpd';
635var comments_identifier = 'http://httpd.apache.org/docs/2.4/rewrite/remapping.html';
636(function(w, d) {
637    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
638        d.write('<div id="comments_thread"><\/div>');
639        var s = d.createElement('script');
640        s.type = 'text/javascript';
641        s.async = true;
642        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
643        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
644    }
645    else { 
646        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
647    }
648})(window, document);
649//--><!]]></script></div><div id="footer">
650<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>
651<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[//><!--
652if (typeof(prettyPrint) !== 'undefined') {
653    prettyPrint();
654}
655//--><!]]></script>
656</body></html>