1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
|
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>Introduction au module Apache mod_rewrite - Serveur Apache HTTP</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
<p class="apache">Serveur Apache HTTP Version 2.3</p>
<img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Introduction au module Apache mod_rewrite</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/rewrite/intro.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/rewrite/intro.html" title="Fran�ais"> fr </a></p>
</div>
<p>Ce document est un compl�ment � la <a href="../mod/mod_rewrite.html">documentation de r�f�rence</a> du module
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Il d�crit les concepts de base dont la
connaissance est n�cessaire pour l'utilisation de
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. D'autres documents entrent d'avantage dans
les d�tails, mais celui-ci devrait aider le d�butant � se mouiller les
pieds.
</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#introduction">Introduction</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#regex">Expressions rationnelles</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#rewriterule">Les bases des r�gles de r��criture</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#flags">Drapeaux de r��criture</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#rewritecond">Conditions de r��criture</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#rewritemap">Tables de r��criture</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">Fichiers .htaccess</a></li>
</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="remapping.html">Redirection and remise en
correspondance</a></li><li><a href="access.html">Contr�le d'acc�s</a></li><li><a href="vhosts.html">Serveurs virtuels</a></li><li><a href="proxy.html">Mise en cache</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</a></li><li><a href="advanced.html">Techniques avanc�es et conseils</a></li><li><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="introduction" id="introduction">Introduction</a></h2>
<p>Le module Apache <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> est un module puissant
et sophistiqu� qui permet la r��criture des URLs. Gr�ce � lui, vous
pouvez effectuer quasiment tous les types de r��criture d'URLs dont vous
avez besoin. Il est cependant assez complexe, et peut para�tre
intimidant au d�butant. Certains ont aussi tendance � traiter les
r�gles de r��criture comme des incantations magiques, et � les utiliser
sans vraiment comprendre leur mani�re d'agir.</p>
<p>Ce document a pour ambition d'�tre suffisamment explicite pour
permettre la compr�hension, et non la copie en aveugle, de ce qui suit.
</p>
<p>Gardez � l'esprit que de nombreuses t�ches de manipulation d'URLs
courantes n'ont pas besoin de la puissance et de la complexit� de
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Pour les t�ches simples, voir
<code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> et la documentation sur la <a href="../urlmapping.html">Mise en correspondance des URLs avec le
syst�me de fichiers</a>.</p>
<p>Enfin, avant de proc�der, assurez-vous d'avoir configur� le niveau de
journalisation de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> � un des niveaux de trace
via la directive <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code>. Bien que
ceci risque de vous submerger sous une �norme quantit� d'informations,
le d�bogage des probl�mes avec la configuration de
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> est � ce prix car vous verrez alors
exactement comment chaque r�gle est trait�e.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="regex" id="regex">Expressions rationnelles</a></h2>
<p>mod_rewrite utilise le vocabulaire des <a href="http://pcre.org/">Expressions rationnelles compatibles Perl</a>.
Ce document n'a pas pour pr�tention d'�tre une r�f�rence d�taill�e des
expressions rationnelles. A cet effet, nous recommandons les <a href="http://pcre.org/pcre.txt">pages de manuel de PCRE</a>, la <a href="http://perldoc.perl.org/perlre.html">page de manuel des
expressions rationnelles Perl</a>, et l'ouvrage <a href="http://www.oreilly.com/catalog/regex2/index.html">Mastering
Regular Expressions, by Jeffrey Friedl</a>.</p>
<p>Dans ce document, nous avons pour but de vous fournir suffisamment de
vocabulaire des expressions rationnelles pour vous mettre le pied �
l'�trier, sans �tre d�pass�, en esp�rant que les directives <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> vous appara�tront comme des
formules scientifiques, plut�t que comme des incantations magiques.</p>
<h3><a name="regexvocab" id="regexvocab">Vocabulaire des expressions rationnelles</a></h3>
<p>Vous trouverez dans ce qui suit le minimum � conna�tre pour �tre en
mesure d'�crire des expressions rationnelles et des r�gles <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>. Ceci ne repr�sente
certainement pas un vocabulaire des expressions rationnelles complet,
mais constitue un bon point de d�part, et devrait vous aider �
d�chiffrer les expressions rationnelles simples, et � �crire vos propres
expressions.</p>
<table>
<tr>
<th>Motif</th>
<th>Signification</th>
<th>Exemple</th>
</tr>
<tr><td><code>.</code></td><td>Correspond � tout caract�re unique
</td><td><code>c.t</code> correspondra � <code>cat</code>,
<code>cot</code>, <code>cut</code>, etc.</td></tr>
<tr><td><code>+</code></td><td>R�p�te le caract�re de correspondance
pr�c�dent une ou plusieurs fois</td>
<td><code>a+</code> correspond � <code>a</code>, <code>aa</code>,
<code>aaa</code>, etc.</td></tr>
<tr><td><code>*</code></td><td>R�p�te le caract�re de correspondance
pr�c�dent z�ro ou plusieurs fois</td>
<td><code>a*</code> correspond � tout ce � quoi correspond
<code>a+</code>, mais correspond aussi � la cha�ne vide.</td></tr>
<tr><td><code>?</code></td><td>Rend la correspondance optionnelle.</td><td>
<code>colou?r</code> correspondra � <code>color</code> et <code>colour</code>.</td>
</tr>
<tr><td><code>^</code></td><td>Appel� ancrage, correspond au d�but de la
cha�ne</td>
<td><code>^a</code> correspond � une cha�ne qui commence par
<code>a</code></td></tr>
<tr><td><code>$</code></td><td>L'autre ancrage, correspond � la fin de
la cha�ne.</td>
<td><code>a$</code> correspond � une cha�ne qui se termine par
<code>a</code>.</td></tr>
<tr><td><code>( )</code></td><td>Regroupe plusieurs caract�res en une
seule entit�, et conserve une correspondance � des fins d'utilisation
dans une r�f�rence arri�re.</td>
<td><code>(ab)+</code>
correspond � <code>ababab</code> - � savoir, le <code>+</code>
s'applique au groupe.
Pour plus de d�tails sur les r�f�rences arri�res, voir <a href="#InternalBackRefs">ci-dessous</a>.</td></tr>
<tr><td><code>[ ]</code></td><td>Une classe de caract�res - correspond �
un des caract�res de la classe</td>
<td><code>c[uoa]t</code> correspond � <code>cut</code>,
<code>cot</code> ou <code>cat</code>.</td></tr>
<tr><td><code>[^ ]</code></td><td>N�gation de la classe de caract�res -
correspond � tout caract�re ne faisant pas partie de la classe</td>
<td><code>c[^/]t</code> correspond � <code>cat</code> ou
<code>c=t</code> mais pas � <code>c/t</code></td></tr>
</table>
<p>Avec <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, le caract�re <code>!</code> peut
pr�fixer une expression rationnelle afin d'en exprimer la n�gation.
Autrement dit, une cha�ne ne correspondra que si elle ne correspond pas
� l'expression situ�e apr�s le <code>!</code>.</p>
<h3><a name="InternalBackRefs" id="InternalBackRefs">Disponibilit� des r�f�rences
arri�res dans les expressions rationnelles</a></h3>
<p>Vous devez vous souvenir d'une chose importante : chaque fois
que vous utilisez des parenth�ses dans un <em>Mod�le</em> ou dans
un des <em>mod�les de conditions</em>, des r�f�rences arri�res
sont cr��es en interne et peuvent �tre rappel�es via les cha�nes
<code>$N</code> et <code>%N</code> (voir ci-dessous). Ces
r�f�rences sont disponibles lors de la cr�ation des cha�nes de
<em>Substitution</em> et des <em>Cha�nes de test</em>. La
figure 1
montre � quels endroits les r�f�rences arri�res sont suceptibles
d'�tre d�velopp�es, et illustre le flux des comparaisons
effectu�es par les r�gles RewriteRule et RewriteCond.</p>
<p class="figure">
<img src="../images/rewrite_rule_flow.png" alt="Flux des comparaisons effectu�es par les r�gles RewriteRule et RewriteCond" /><br />
<dfn>Figure 1 :</dfn> Le cheminement d'une r�f�rence arri�re �
travers une r�gle.
</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="rewriterule" id="rewriterule">Les bases des r�gles de r��criture</a></h2>
<p>Une r�gle de r��criture <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> est constitu�e de trois
arguments s�par�s par des espaces. Les arguments sont :</p>
<ol>
<li><var>Mod�le</var>: le mod�le des URLs auxquelles la r�gle doit
s'appliquer;</li>
<li><var>Substitution</var>: vers quoi la requ�te correspondante doit �tre
transform�e;</li>
<li><var>[drapeaux]</var>: options affectant la requ�te r��crite.</li>
</ol>
<p>Le <var>Mod�le</var> est toujours une <a href="#regex">expression
rationnelle</a> compar�e au chemin de l'URL de la requ�te entrante (la
partie situ�e apr�s le nom d'h�te mais avant tout point d'interrogation
qui indique le d�but d'une cha�ne de requ�te).</p>
<p class="figure">
<img src="../images/syntax_rewriterule.png" alt="Syntaxe de la directive RewriteRule" /><br />
<dfn>Figure 2 :</dfn> Syntaxe de la directive RewriteRule.
</p>
<p>La cha�ne de <var>Substitution</var> peut, quant � elle, �tre de
trois types :</p>
<dl>
<dt>Un chemin complet du syst�me de fichiers vers une ressource</dt>
<dd>
<div class="example"><p><code>
RewriteRule ^/jeux /usr/local/jeux/web
</code></p></div>
<p>Ceci peut faire correspondre une requ�te � toute localisation voulue de
votre syst�me de fichiers, un peu comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>.</p>
</dd>
<dt>Un chemin web vers une ressource</dt>
<dd>
<div class="example"><p><code>
RewriteRule ^/foo$ /bar
</code></p></div>
<p>Si la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> a
pour valeur <code>/usr/local/apache2/htdocs</code>, cette r�gle va faire
correspondre les requ�tes pour <code>http://example.com/foo</code> au
chemin <code>/usr/local/apache2/htdocs/bar</code>.</p>
</dd>
<dt>Une URL absolue</dt>
<dd>
<div class="example"><p><code>
RewriteRule ^/produits/vues$ http://site2.example.com/voirproduits.html [R]
</code></p></div>
<p>Ceci informe le client qu'il doit effectuer une nouvelle requ�te vers
l'URL sp�cifi�e.</p>
</dd>
</dl>
<p>La cha�ne de <var>Substitution</var> peut aussi contenir des
<em>r�f�rences arri�res</em> vers des parties du chemin d'URL entrant
correspondant au <var>Mod�le</var>. Consid�rons ce qui suit :</p>
<div class="example"><p><code>
RewriteRule ^/produits/(.*)/view$ /var/web/produitsdb/$1
</code></p></div>
<p>La variable <code>$1</code> sera remplac�e par tout texte
correspondant � l'expression situ�e entre les parenth�ses dans le
<var>Mod�le</var>. Par exemple, une requ�te pour
<code>http://example.com/produits/r14df/vue</code> correspondra au
chemin <code>/var/web/produitsdb/r14df</code>.</p>
<p>S'il y a plus d'une expression entre parenth�ses, elle seront
accessibles selon leur ordre d'apparition via les variables
<code>$1</code>, <code>$2</code>, <code>$3</code>, etc...</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="flags" id="flags">Drapeaux de r��criture</a></h2>
<p>Le comportement d'une r�gle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> peut �tre modifi� par la
pr�sence d'un ou plusieurs drapeaux en fin de r�gle. Par exemple, les
conditions de correspondance d'une r�gle peuvent �tre rendues
insensibles � la casse par la pr�sence du drapeau <code>[NC]</code> :
</p>
<div class="example"><p><code>
RewriteRule ^puppy.html petitchien.html [NC]
</code></p></div>
<p>Pour une liste des drapeaux disponibles, leurs significations, et des
exemples, voir le document <a href="flags.html">Drapeaux de
r��criture</a>.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="rewritecond" id="rewritecond">Conditions de r��criture</a></h2>
<p>Il est possible d'utiliser une ou plusieurs directives <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> pour restreindre les types
de requ�tes auxquelles devra s'appliquer la r�gle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> suivante. Le premier
argument est une variable d�crivant une caract�ristique de la requ�te,
le second argument est une <a href="#regex">expression rationnelle</a>
qui doit correspondre � la variable, et un troisi�me argument optionnel
est une liste de drapeaux qui modifient la mani�re dont la
correspondance est �valu�e.</p>
<p class="figure">
<img src="../images/syntax_rewritecond.png" alt="Syntaxe de la directive RewriteCond" /><br />
<dfn>Figure 3 :</dfn> Syntaxe de la directive RewriteCond
</p>
<p>Par exemple, pour renvoyer toutes les requ�tes en provenance d'une
certaine tranche d'adresses IP vers un autre serveur, vous pouvez
utiliser :</p>
<div class="example"><p><code>
RewriteCond %{REMOTE_ADDR} ^10\.2\.<br />
RewriteRule (.*) http://intranet.example.com$1
</code></p></div>
<p>Si vous sp�cifiez plus d'une directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>, ces directives
doivent toutes �tre satisfaites pour que la r�gle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> suivante s'applique. Par exemple,
pour interdire les requ�tes qui contiennent le mot "hack" dans la cha�ne
de requ�te, sauf si elles contiennent aussi un cookie contenant le mot
"go", vous pouvez utiliser :</p>
<div class="example"><p><code>
RewriteCond %{QUERY_STRING} hack<br />
RewriteCond %{HTTP_COOKIE} !go<br />
RewriteRule . - [F]
</code></p></div>
<p>Notez que le point d'exclamation indique une correspondance n�gative
; ainsi, la r�gle n'est appliqu�e que si le cookie ne contient pas "go"</p>
<p>Les correspondances dans les expressions rationnelles contenues dans
les directives <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>
peuvent constituer des parties de la cha�ne de <var>Substitution</var>
de la r�gle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> via
les variables <code>%1</code>, <code>%2</code>, etc... Par
exemple, ce qui suit va diriger la requ�te vers un r�pertoire diff�rent
en fonction du nom d'h�te utilis� pour acc�der au site :</p>
<div class="example"><p><code>
RewriteCond %{HTTP_HOST} (.*)<br />
RewriteRule ^/(.*) /sites/%1/$1
</code></p></div>
<p>Si la requ�te concernait <code>http://example.com/foo/bar</code>,
alors <code>%1</code> contiendrait <code>example.com</code> et
<code>$1</code> contiendrait <code>foo/bar</code>.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="rewritemap" id="rewritemap">Tables de r��criture</a></h2>
<p>La directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
permet en quelque sorte de faire appel � une fonction externe pour
effectuer la r��criture � votre place. Tout ceci est d�crit plus en
d�tails dans la <a href="rewritemap.html">Documentation
suppl�mentaire sur RewriteMap</a>.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="htaccess" id="htaccess">Fichiers .htaccess</a></h2>
<p>La r��criture est en g�n�ral d�finie au niveau de la configuration du
serveur principal (en dehors de toute section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>) ou dans une section <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code>. Il s'agit l� de la
mani�re la plus simple de mettre en oeuvre la r��criture et nous la
recommandons. Il est possible, cependant, de mettre en oeuvre la
r��criture au sein d'une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou d'un fichier <a href="../howto/htaccess.html"><code>.htaccess</code></a> ; ce type de
configuration est cependant plus complexe. Cette technique est appel�e
r��criture par r�pertoire.</p>
<p>La principale diff�rence avec les r��critures au niveau du serveur r�side
dans le fait que le pr�fixe du chemin du r�pertoire contenant le fichier
<code>.htaccess</code> est supprim� avant la mise en correspondance dans
la r�gle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>. De
plus, on doit utiliser la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritebase">RewriteBase</a></code> pour s'assurer que la
requ�te est correctement mise en correspondance.</p>
</div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/rewrite/intro.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/rewrite/intro.html" title="Fran�ais"> fr </a></p>
</div><div id="footer">
<p class="apache">Copyright 2011 The Apache Software Foundation.<br />Autoris� sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
</body></html>
|