<-
Apache > Serveur HTTP > Documentation > Version 2.4 > Rewrite

H�bergement virtuel de masse avec mod_rewrite

Langues Disponibles:  en  |  fr 

Ce document est un compl�ment � la documentation de r�f�rence du module mod_rewrite. Il d�crit comment cr�er des serveurs virtuels dynamiquement configur�s en utilisant mod_rewrite.

L'utilisation de mod_rewrite n'est pas la meilleure m�thode pour configurer des serveurs virtuels. Vous devez dans un premier temps tenter de r�soudre votre probl�me via ces d'autres m�thodes avant d'avoir recours � mod_rewrite. Voir aussi le document Comment �viter l'utilisation de mod_rewrite.

Voir aussi

top

Serveurs virtuels pour des noms d'h�tes arbitraires

Description :

Nous voulons cr�er automatiquement un serveur virtuel pour tout nom d'h�te qui peut �tre r�solu dans notre domaine, sans avoir � cr�er de nouvelle section VirtualHost.

Dans cet exemple, nous supposons que nous utilisons le nom d'h�te www.SITE.example.com pour chaque utilisateur, et que nous servons leur contenu depuis /home/SITE/www.

Solution :
RewriteEngine on

RewriteMap    lowercase int:tolower

RewriteCond   "${lowercase:%{HTTP_HOST}}" "^www\.([^.]+)\.example\.com$"
RewriteRule   "^(.*)" "/home/%1/www$1"
Discussion
Vous devez v�rifier le bon fonctionnement de la r�solution DNS - Apache ne g�re pas la r�solution de nom. Vous devrez cr�er soit des enregistrements CNAME pour chaque nom d'h�te, soit un enregistrement DNS avec caract�res g�n�riques. La cr�ation des enregistrements DNS est en dehors du sujet de ce document.

La directive RewriteMap interne tolower permet de s'assurer que les noms d'h�tes utilis�s seront tous en minuscules, de fa�on � �viter toute ambiguit� dans la structure des r�pertoires qui doit �tre cr��e.

Les contenus des parenth�ses utilis�es dans une directive RewriteCond sont enregistr�s dans les r�f�rences arri�res %1, %2, etc..., alors que les contenus des parenth�ses utilis�es dans une directive RewriteRule le sont dans les r�f�rences arri�res $1, $2, etc...

Comme c'est le cas pour de nombreuses techniques discut�es dans ce document, mod_rewrite n'est vraiment pas la meilleure m�thode pour accomplir cette t�che. Vous devez plut�t vous tourner vers mod_vhost_alias, car ce dernier sera bien plus � m�me de g�rer tout ce qui est au del� du domaine des fichiers statiques, comme les contenus dynamiques et la r�solution des alias.

top

Configuration dynamique de serveurs virtuels via mod_rewrite

Cet extrait du fichier apache2.conf permet d'obtenir le m�me r�sultat que le premier exemple. La premi�re moiti� est tr�s similaire � la partie correspondante ci-dessus, except� quelques modifications requises � des fins de compatibilit� ascendante et pour faire en sorte que la partie mod_rewrite fonctionne correctement ; la seconde moiti� configure mod_rewrite pour effectuer le travail proprement dit.

Comme mod_rewrite s'ex�cute avant tout autre module de traduction d'URI (comme mod_alias), il faut lui ordonner explicitement d'ignorer toute URL susceptible d'�tre trait�e par ces autres modules. Et comme ces r�gles auraient sinon court-circuit� toute directive ScriptAlias, nous devons faire en sorte que mod_rewrite d�clare explicitement ces correspondances.

# extrait le nom de serveur de l'en-t�te Host:
UseCanonicalName Off

# journaux dissociables
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog "logs/access_log" vcommon

<Directory "/www/hosts">
    # ExecCGI est n�cessaire ici car on ne peut pas forcer l'ex�cution
    # des CGI � la mani�re de ScriptAlias
    Options FollowSymLinks ExecCGI
</Directory>

RewriteEngine On

# un nom de serveur extrait d'un en-t�te Host: peut �tre dans n'importe
# quelle casse

## on s'occupe tout d'abord des documents normaux :
# permet � Alias "/icons/" de fonctionner - r�p�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]
top

Utilisation d'un fichier de configuration du serveur virtuel s�par�

Cette construction utilise des fonctionnalit�s plus avanc�es de mod_rewrite pour effectuer la traduction depuis le serveur virtuel vers la racine des documents, � partir d'un fichier de configuration s�par�. Elle est plus souple mais n�cessite une configuration plus compliqu�e.

Le fichier vhost.map devrait ressembler � ceci :

www.client-1.example.com /www/clients/1
www.client-2.example.com /www/clients/2
# ...
www.client-N.example.com /www/clients/N

On doit ajouter � apache2.conf :

RewriteEngine on

RewriteMap   lowercase  int:tolower

# d�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 � base de fichier
RewriteCond  "${vhost:%1}"                  "^(/.*)$"
RewriteRule  "^/(.*)$"                      "%1/docs/$1"

RewriteCond  "%{REQUEST_URI}"               "^/cgi-bin/"
RewriteCond  "${lowercase:%{SERVER_NAME}}"  "^(.+)$"
RewriteCond  "${vhost:%1}"                  "^(/.*)$"
RewriteRule  "^/cgi-bin/(.*)$"              "%1/cgi-bin/$1" [H=cgi-script]

Langues Disponibles:  en  |  fr 

top

Commentaires

Notice:
This is not a Q&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 mailing lists.