blob: a534ac47a7732dc77a4b902254a5dbd58acd32d0 [file] [log] [blame]
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
<!-- English Revision: 1673563 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manualpage metafile="vhosts.xml.meta">
<parentdocument href="./">Rewrite</parentdocument>
<title>H&eacute;bergement virtuel de masse avec mod_rewrite</title>
<summary>
<p>Ce document est un compl&eacute;ment &agrave; la <a
href="../mod/mod_rewrite.html">documentation de r&eacute;f&eacute;rence</a> du module
<module>mod_rewrite</module>. Il d&eacute;crit comment cr&eacute;er des serveurs
virtuels dynamiquement configur&eacute;s en utilisant
<module>mod_rewrite</module>.</p>
<note type="warning">L'utilisation de mod_rewrite n'est pas la meilleure
m&eacute;thode pour configurer des serveurs virtuels. Vous devez dans un
premier temps tenter de r&eacute;soudre votre probl&egrave;me via ces <a
href="../vhosts/mass.html">d'autres m&eacute;thodes</a> avant d'avoir
recours &agrave; mod_rewrite. Voir aussi le document <a
href="avoid.html#vhosts">Comment &eacute;viter l'utilisation de
mod_rewrite</a>.</note>
</summary>
<seealso><a href="../mod/mod_rewrite.html">Documentation du module</a></seealso>
<seealso><a href="intro.html">Introduction &agrave; mod_rewrite</a></seealso>
<seealso><a href="remapping.html">Redirection et remise en
correspondance</a></seealso>
<seealso><a href="access.html">Contr&ocirc;le d'acc&egrave;s</a></seealso>
<!--<seealso><a href="vhosts.html">Serveurs virtuels</a></seealso>-->
<seealso><a href="proxy.html">Serveurs mandataires</a></seealso>
<seealso><a href="rewritemap.html">Utilisation de RewriteMap</a></seealso>
<seealso><a href="advanced.html">Techniques avanc&eacute;es</a></seealso>
<seealso><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></seealso>
<section id="per-hostname">
<title>Serveurs virtuels pour des noms d'h&ocirc;tes arbitraires</title>
<dl>
<dt>Description :</dt>
<dd>
<p>Nous voulons cr&eacute;er automatiquement un serveur virtuel pour tout
nom d'h&ocirc;te qui peut &ecirc;tre r&eacute;solu dans notre domaine, sans avoir &agrave;
cr&eacute;er de nouvelle section VirtualHost.</p>
<p>Dans cet exemple, nous supposons que nous utilisons le nom d'h&ocirc;te
<code>www.<strong>SITE</strong>.example.com</code> pour chaque
utilisateur, et que nous servons leur contenu depuis
<code>/home/<strong>SITE</strong>/www</code>.</p>
</dd>
<dt>Solution :</dt>
<dd>
<highlight language="config">
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteCond "${lowercase:%{<strong>HTTP_HOST</strong>}}" "^www\.<strong>([^.]+)</strong>\.example\.com$"
RewriteRule "^(.*)" "/home/<strong>%1</strong>/www$1"
</highlight></dd>
<dt>Discussion</dt>
<dd>
<note type="warning">Vous devez v&eacute;rifier le bon fonctionnement de la
r&eacute;solution DNS - Apache ne g&egrave;re pas la r&eacute;solution de nom. Vous
devrez cr&eacute;er soit des enregistrements CNAME pour chaque nom d'h&ocirc;te,
soit un enregistrement DNS avec caract&egrave;res g&eacute;n&eacute;riques. La cr&eacute;ation
des enregistrements DNS est en dehors du sujet de ce document.</note>
<p>La directive RewriteMap interne <code>tolower</code> permet de
s'assurer que les noms d'h&ocirc;tes utilis&eacute;s seront tous en minuscules, de
fa&ccedil;on &agrave; &eacute;viter toute ambiguit&eacute; dans la structure des r&eacute;pertoires qui
doit &ecirc;tre cr&eacute;&eacute;e.</p>
<p>Les contenus des parenth&egrave;ses utilis&eacute;es dans une directive <directive
module="mod_rewrite">RewriteCond</directive> sont enregistr&eacute;s dans les
r&eacute;f&eacute;rences arri&egrave;res <code>%1</code>, <code>%2</code>, etc..., alors que
les contenus des parenth&egrave;ses utilis&eacute;es dans une directive <directive
module="mod_rewrite">RewriteRule</directive> le sont dans les
r&eacute;f&eacute;rences arri&egrave;res <code>$1</code>, <code>$2</code>, etc...</p>
<p>
Comme c'est le cas pour de nombreuses techniques discut&eacute;es dans ce
document, mod_rewrite n'est vraiment pas la meilleure m&eacute;thode pour
accomplir cette t&acirc;che. Vous devez plut&ocirc;t vous tourner vers
<module>mod_vhost_alias</module>, car ce dernier sera bien plus &agrave; m&ecirc;me
de g&eacute;rer tout ce qui est au del&agrave; du domaine des fichiers statiques,
comme les contenus dynamiques et la r&eacute;solution des alias.
</p>
</dd>
</dl>
</section>
<section id="simple.rewrite"><title>Configuration dynamique de serveurs
virtuels via <module>mod_rewrite</module></title>
<p>Cet extrait du fichier <code>httpd.conf</code> permet d'obtenir
le m&ecirc;me r&eacute;sultat que <a href="#per-hostname">le premier exemple</a>.
La premi&egrave;re moiti&eacute; est tr&egrave;s similaire &agrave; la partie correspondante
ci-dessus, except&eacute; quelques modifications requises &agrave; des fins de
compatibilit&eacute; ascendante et pour faire en sorte que la partie
<code>mod_rewrite</code> fonctionne correctement ; la seconde moiti&eacute;
configure <code>mod_rewrite</code> pour effectuer le travail
proprement dit.</p>
<p>Comme <code>mod_rewrite</code> s'ex&eacute;cute avant tout autre module
de traduction d'URI (comme <code>mod_alias</code>), il faut lui
ordonner explicitement d'ignorer toute URL susceptible d'&ecirc;tre
trait&eacute;e par ces autres modules. Et comme ces r&egrave;gles auraient sinon
court-circuit&eacute; toute directive <code>ScriptAlias</code>, nous devons
faire en sorte que <code>mod_rewrite</code> d&eacute;clare explicitement
ces correspondances.</p>
<highlight language="config">
# extrait le nom de serveur de l'en-t&ecirc;te Host:
UseCanonicalName Off
# journaux dissociables
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog "logs/access_log" vcommon
&lt;Directory "/www/hosts"&gt;
# ExecCGI est n&eacute;cessaire ici car on ne peut pas forcer l'ex&eacute;cution
# des CGI &agrave; la mani&egrave;re de ScriptAlias
Options FollowSymLinks ExecCGI
&lt;/Directory&gt;
RewriteEngine On
# un nom de serveur extrait d'un en-t&ecirc;te Host: peut &ecirc;tre dans n'importe
# quelle casse
## on s'occupe tout d'abord des documents normaux :<br />
# permet &agrave; Alias "/icons/" de fonctionner - r&eacute;p&eacute;ter pour les autres
RewriteCond "%{REQUEST_URI}" "!^/icons/"
# permet aux CGIs de fonctionner
RewriteCond "%{REQUEST_URI}" "!^/cgi-bin/"
# le coeur du traitement
RewriteRule "^/(.*)$" "/www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1"
## on s'occupe maintenant des CGIs - on doit forcer l'utilisation d'un
# gestionnaire
RewriteCond "%{REQUEST_URI}" "^/cgi-bin/"
RewriteRule "^/(.*)$" "/www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1" [H=cgi-script]
</highlight>
</section>
<section id="xtra-conf"><title>Utilisation d'un fichier de configuration
du serveur virtuel s&eacute;par&eacute;</title>
<p>Cette construction utilise des fonctionnalit&eacute;s plus avanc&eacute;es de
<module>mod_rewrite</module> pour effectuer la traduction depuis le
serveur virtuel vers la racine des documents, &agrave; partir d'un fichier
de configuration s&eacute;par&eacute;. Elle est plus souple mais n&eacute;cessite une
configuration plus compliqu&eacute;e.</p>
<p>Le fichier <code>vhost.map</code> devrait ressembler &agrave; ceci :</p>
<example>
www.client-1.example.com /www/clients/1<br />
www.client-2.example.com /www/clients/2<br />
# ...<br />
www.client-N.example.com /www/clients/N<br />
</example>
<p>On doit ajouter &agrave; <code>httpd.conf</code> :</p>
<highlight language="config">
RewriteEngine on
RewriteMap lowercase int:tolower
# d&eacute;finit le fichier de correspondances
RewriteMap vhost "txt:/www/conf/vhost.map"
# on s'occupe des alias comme ci-dessus
RewriteCond "%{REQUEST_URI}" "!^/icons/"
RewriteCond "%{REQUEST_URI}" "!^/cgi-bin/"
RewriteCond "${lowercase:%{SERVER_NAME}}" "^(.+)$"
# on effectue ici la remise en correspondance &agrave; base de fichier
RewriteCond "${vhost:%1}" "^(/.*)$"
RewriteRule "^/(.*)$" "%1/docs/$1"
RewriteCond "%{REQUEST_URI}" "^/cgi-bin/"
RewriteCond "${lowercase:%{SERVER_NAME}}" "^(.+)$"
RewriteCond "${vhost:%1}" "^(/.*)$"
RewriteRule "^/(.*)$" "%1/cgi-bin/$1" [H=cgi-script]
</highlight>
</section>
</manualpage>