summaryrefslogtreecommitdiffstats
path: root/docs/manual/rewrite/avoid.html.fr
blob: bd873ae5d978ebae3c4ffbe18290df42ddb76337 (plain)
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
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Quand ne pas utiliser mod_rewrite - Serveur HTTP Apache Version 2.5</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 rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<script src="../style/scripts/prettify.min.js" type="text/javascript">
</script>

<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/quickreference.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>
<p class="apache">Serveur HTTP Apache Version 2.5</p>
<img alt="" src="../images/feather.png" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<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.5</a> &gt; <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Quand ne pas utiliser mod_rewrite</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/rewrite/avoid.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/rewrite/avoid.html" title="Français">&nbsp;fr&nbsp;</a></p>
</div>


<p>Ce document est un complément à la <a href="../mod/mod_rewrite.html">Documentation de référence</a> de
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Il décrit peut-être un des concepts les
plus importants à propos de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> - à savoir, quand doit-on éviter
de l'utiliser.</p>

<p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> doit être considéré comme un dernier recours,
lorsqu'aucune alternative n'est possible. Utiliser mod_rewrite lorsqu'il
existe des alternatives plus simples conduit à des configurations
confuses, fragiles, et difficiles à maintenir. La compréhension des
autres alternatives disponibles est une étape très importante sur le
chemin de la maîtrise de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>

<p>Vous devez vous attacher à comprendre le
fonctionnement des exemples, car la plupart d'entre eux ne
fonctionneront pas sur votre système si vous vous contentez de les
copier/coller dans vos fichiers de configuration.</p>

<p>Le cas le plus courant dans lequel <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> est
l'outil approprié est la situation où la seule solution envisageable
nécessite l'accès aux fichiers de configuration du serveur, alors que
cet accès ne vous est pas accordé. Certaines directives de configuration
ne sont disponibles que dans le fichier de configuration du serveur. Si
vous ne pouvez agir que sur les fichiers .htaccess, vous devrez donc
vous tourner vers <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>

</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#redirect">Redirection simple</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#alias">Alias d'URL</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#vhosts">Hébergement virtuel</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#proxy">Mandat simple</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#setenv">Test de variables d'environnement</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="intro.html">Introduction à mod_rewrite</a></li><li><a href="remapping.html">Redirection et 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">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="#comments_section">Commentaires</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="redirect" id="redirect">Redirection simple</a><a title="Lien permanent" href="#redirect" class="permalink">&para;</a></h2>


<p><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> fournit les directives <code class="directive"><a href="../mod/mod_alias.html#redirect">Redirect</a></code> et <code class="directive"><a href="../mod/mod_alias.html#redirectmatch">RedirectMatch</a></code> qui permettent de
rediriger une URL vers une autre. Plutôt que d'utiliser la directive
<code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> pour ce genre de
redirection simple d'une URL ou d'une classe d'URLs vers une autre, on
préfèrera l'utilisation de ces directives. En outre, avec
<code>RedirectMatch</code>, vous pouvez inclure une expression
rationnelle dans votre critère de redirection, ce qui vous permet de
bénéficier de nombreux avantages de la directive
<code>RewriteRule</code>.</p>

<p>Une utilisation courante de la directive <code>RewriteRule</code> est
la redirection de toute une classe d'URLs. Par exemple, toutes les URLs
faisant référence au répertoire <code>/un</code> doivent être
redirigées vers <code>http://un.example.com/</code>, ou toutes les
requêtes <code>http</code> doivent être redirigées vers
<code>https</code>.</p>

<p>Pour ce faire, il est préférable d'utiliser la directive
<code>Redirect</code>. Souvenez-vous que la directive
<code>Redirect</code> conserve les informations relatives au chemin. En
d'autres termes, la redirection d'une URL <code>/un</code> va aussi
rediriger toutes les URLs de niveaux inférieurs comme
<code>/un/deux.html</code> et <code>/un/trois/quatre.html</code>.</p>

<p>Pour rediriger les URLs sous <code>/un</code> vers
<code>http://un.example.com/</code>, utilisez cette définition :</p>

<pre class="prettyprint lang-config">Redirect /one/ http://one.example.com/</pre>


<p>Pour rediriger un nom d'hôte vers un autre nom d'hôte, par exemple
<code>example.com</code> vers <code>www.example.com</code>, voir la
méthode <a href="remapping.html#canonicalhost">Noms d'hôtes canoniques</a>.</p>

<p>Pour rediriger les URLs <code>http</code> vers <code>https</code>,
utilisez cette définition :</p>

<pre class="prettyprint lang-config">&lt;VirtualHost *:80&gt;
ServerName www.example.com
Redirect "/" "https://www.example.com/"
&lt;/VirtualHost&gt;

&lt;VirtualHost *:443&gt;
ServerName www.example.com
#  ... insérer ici la configuration SSL
&lt;/VirtualHost&gt;</pre>


<p>L'utilisation de la directive <code>RewriteRule</code> pour accomplir
cette tâche peut se justifier s'il existe d'autres directives
<code>RewriteRule</code> dans la même portée. En effet, lorsque des
directives <code>Redirect</code> et <code>RewriteRule</code> se trouvent
dans la même portée, les directives <code>RewriteRule</code> sont
exécutées en premier, sans tenir compte de leur ordre d'apparition dans
le fichier de configuration.</p>

<p>Dans le cas de la redirection <em>http-vers-https</em>, l'utilisation
de règles <code>RewriteRule</code> se justifie si vous n'avez pas accès
au fichier de configuration principal, et devez donc accomplir cette
tâche au sein d'un fichier <code>.htaccess</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="alias" id="alias">Alias d'URL</a><a title="Lien permanent" href="#alias" class="permalink">&para;</a></h2>
<p>La directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> permet
de mettre en correspondance un URI avec un répertoire, ce dernier étant
en général situé en dehors de l'arborescence définie par la directive
<code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. Bien qu'il soit
possible d'effectuer cette mise en correspondance avec
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, il est préférable d'utiliser la directive
<code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> pour des raisons de simplicité
et de performances.</p>

<div class="example"><h3>Utilisation de la directive Alias</h3><pre class="prettyprint lang-config">Alias "/cats" "/var/www/virtualhosts/felines/htdocs"</pre>
</div>

<p>
Pour effectuer cette mise en correspondance, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
s'impose si vous n'avez pas accès aux fichiers de configuration du
serveur. En effet, la directive Alias ne peut pas être utilisée dans un
fichier <code>.htaccess</code>, mais seulement dans un contexte de
serveur principal ou de serveur virtuel.
</p>

<p>En outre, vous pouvez arriver au même résultat avec les liens
symboliques, pourvu que <code>Options FollowSymLinks</code> soit activé
sur votre serveur.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="vhosts" id="vhosts">Hébergement virtuel</a><a title="Lien permanent" href="#vhosts" class="permalink">&para;</a></h2>
<p>Bien qu'il soit possible de gérer les <a href="vhosts.html">serveurs
virtuels avec mod_rewrite</a>, il s'agit rarement de la bonne méthode.
Il est pratiquement toujours préférable de créer des blocs
<code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> individuels.
Dans l'éventualité où vous devez gérer
un grand nombre de serveurs virtuels, vous devez vous tourner vers
<code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> pour créer ces serveurs
automatiquement.</p>

<p>Il est aussi possible d'utiliser des modules comme <code class="module"><a href="../mod/mod_macro.html">mod_macro</a></code> pour
créer un grand nombre de serveurs virtuels dynamiquement.</p>

<p>L'utilisation de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour la création de
serveurs virtuels peut se révéler appropriée si votre service
d'hébergement ne vous permet pas d'accéder aux fichiers de configuration
du serveur, et que vous soyez par conséquent obligé de passer par les
fichiers <code>.htaccess</code>.</p>

<p>Voir le document <a href="vhosts.html">création de serveurs virtuels
avec mod_rewrite</a> pour plus de détails sur la manière d'y parvenir si
cela semble être tout de même la meilleure approche.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="proxy" id="proxy">Mandat simple</a><a title="Lien permanent" href="#proxy" class="permalink">&para;</a></h2>

<p>La directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> fournit
le drapeau <a href="flags.html#flag_p">[P]</a> qui permet de faire passer les URIs
réécrits par <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>.</p>

<pre class="prettyprint lang-config">RewriteRule "^/?images(.*)" "http://serveur-images.local/images$1" [P]</pre>


<p>Cependant, dans les nombreux cas où aucune correspondance au modèle
n'est vraiment nécessaire, comme dans l'exemple ci-dessus, il est
préférable d'utiliser la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>. L'exemple précédent pourrait
être remplacé par :</p>

<pre class="prettyprint lang-config">ProxyPass "/images/" "http://serveur-images.local/images/"</pre>


<p>Que vous utilisiez <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> ou <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>, vous devrez dans tous les cas
utiliser aussi la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> pour intercepter les
redirections en provenance du serveur d'arrière-plan :</p>

<pre class="prettyprint lang-config">ProxyPassReverse "/images/" "http://serveur-images.local/images/"</pre>


<p>Vous devrez cependant tout de même utiliser <code>RewriteRule</code>
lorsque d'autres <code>RewriteRule</code>s se trouvent dans la même portée,
car elles agissent en général avant les directives
<code>ProxyPass</code>, et peuvent ainsi les court-circuiter.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="setenv" id="setenv">Test de variables d'environnement</a><a title="Lien permanent" href="#setenv" class="permalink">&para;</a></h2>

<p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> est souvent utilisé pour effectuer une
action en fonction de la présence ou de l'absence d'une variable
d'environnement particulière ou d'un en-tête de requête, ce qui peut
être accompli de manière plus efficace via la directive <code class="directive"><a href="../mod/core.html#if">&lt;If&gt;</a></code>.</p>

<p>Considérons par exemple le scénario courant où la directive
<code class="directive">RewriteRule</code> est utilisée pour forcer un nom
d'hôte canonique, tel que <code>www.example.com</code> au lieu de
<code>example.com</code>. Il est possible d'utiliser à la place la
directive <code class="directive"><a href="../mod/core.html#if">&lt;If&gt;</a></code> comme
suit :</p>

<pre class="prettyprint lang-config">&lt;If "req('Host') != 'www.example.com'"&gt;
    Redirect "/" "http://www.example.com"
&lt;/If&gt;</pre>


<p>On peut utiliser cette technique dans de nombreux scénarios courant
pour remplacer <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour effectuer des actions
en fonction d'en-têtes de requêtes ou de réponses, ou de variables
d'environnement.</p>

<p>Voir en particulier la <a href="../expr.html">documentation sur
l'évaluation des expressions</a> pour une vue d'ensemble des types
d'expressions que vous pouvez utiliser dans les sections <code class="directive"><a href="../mod/core.html#if">&lt;If&gt;</a></code>,
ainsi que dans certaines directives.</p>

</div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/rewrite/avoid.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/rewrite/avoid.html" title="Français">&nbsp;fr&nbsp;</a></p>
</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>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/trunk/rewrite/avoid.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else {
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2018 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/quickreference.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[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>