En commençant à bidouiller avec des frameworks PHP tels que Symfony et CodeIgniter, j’ai rapidement eu besoin de mettre en place des VirtualHosts sous WampServer afin de pouvoir mieux séparer mes différents projets. Ayant rencontré quelques petites difficultés vu que je ne savais pas du tout comment faire, voici un petit tuto pour aider ceux qui sont dans le même cas que moi.
1. Notes préliminaires
La technique que je vous explique ici a été testé sous Windows XP Pro 32bits, Vista Familial 32bits et Seven Pro 32bits sans le moindre soucis.
La version d’Apache utilisée a été la version 2.2.11 (et une ou deux autres inférieures mais j’ai oublié de noter leur numéro).
2. Choix du nom
La première chose à faire est de choisir le nom que l’on voudra donner à notre hôte virtuel. Si vous bossez en local, je vous conseille de ne pas utiliser un nom de domaine existant mais plutôt de passer par un TLD comme « .loc ». Vu qu’on va modifier le fichier hosts par la suite, ça vous évitera de ne plus avoir accès au vrai site.
Tout au long de ce billet, c’est le nom de domaine http://myhost.loc/ que je vais mettre en place. Si vous tentez d’accéder maintenant à cette adresse, vous devriez en toute logique avoir une jolie erreur Serveur introuvable, ce qui est tout à fait normal étant donné que votre système ne sait pas quelle IP liée à ce nom de domaine. Pour ceux qui ne savent pas comment fonctionne les DNS, voilà un peu de lecture : DNS (Domain Name System) sur Wikipedia.
3. Fichier hosts
En vous connectant à cette URL, votre ordinateur va essayer de récupérer l’adresse IP de ce nom de domaine via le fichier hosts puis chez votre fournisseur de DNS. Etant donné que « myhost.loc » n’existe dans aucun des deux, cette erreur est levée (d’où le message Serveur introuvable).
Pour l’ajouter, rien de plus simple : éditer le fichier hosts qui se trouve dans le dossier C:/Windows/system32/drivers/etc/. Pour pouvoir l’éditer, penser à enlever la lecture seule et à avoir les droits d’administration. Il suffit ensuite de rajouter cette ligne dans celui-ci :
127.0.0.1 localhost
127.0.0.1 myhost.loc
Vous demandez donc que « myhost.loc » pointe vers l’adresse IP « 127.0.0.1″, soit l’adresse IP locale de votre PC. Si vous tentez d’y accéder de nouveau, vous devriez maintenant tomber sur la page d’accueil de WampServer. Il nous reste plus qu’à configurer Apache afin qu’il fasse pointer ce domaine au bon endroit.
Si vous n’avez pas la ligne « 127.0.0.1 localhost », ajoutez la maintenant au début de la liste, ça vous évitera sûrement des soucis par la suite.
4. Configurer les VirtualHosts
4.1. a2ensite et a2dissite
Pour bien faire, il faudrait utiliser les commandes a2ensite et a2dissite pour activer et désactiver des VirtualHosts définis dans des fichiers. N’ayant pas accès à ces commandes sous WampServer (ou alors j’ai vraiment mal cherché), il fallait trouver une autre solution : tout configurer dans httpd.conf, ce qui est beaucoup plus contraignant au niveau de la maintenance. On va cependant tâcher de rendre ça le plus simple possible. Si cependant plus d’information sur ce point vous intéresse, je vous conseille le lien suivant : Héberger plusieurs sites sur son serveur : Virtual Hosts.
4.2. Création des VirtualHosts
Pour créer les VirtualHosts, on peut le faire à l’arrache à savoir en les mettant directement dans le fichier httpd.conf. Niveau propreté et maintenabilité, c’est pas ce qu’il y a de mieux. Je vous conseille de créer un dossier nommé hosts à la racine de votre répertoire contenant WampServer (« C:/Wamp » par défaut).
Toujours par soucis de propreté, je conseille également de créer un seul fichier par VirtualHosts. De plus cette méthode permet également de se rapprocher de celle que l’on devrait utiliser normalement (cf. point ci-dessus). Je crée donc un fichier « myhost.conf » pour mon domaine « myhost.loc » contenant :
NameVirtualHost myhost.loc
<VirtualHost myhost.loc>
DocumentRoot "C:/Wamp/www/myhost/"
DirectoryIndex index.php
<Directory "C:/Wamp/www/myhost/">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
La configuration est ici basique et je vous laisse le soin de la personnaliser selon vos besoins. Une petite information quand même concernant le chemin d’accès : utiliser des « / » et pas de « \ » comme séparateur, et ne pas oublier le « / » final.
Voilà votre hôte virtuel est crée. Passons maintenant à la configuration d’Apache pour l’utiliser.
4.3. Inclusion des VirtualHosts dans httpd.conf
Pour être sûr d’éditer le bon fichier httpd.conf si vous disposez de plusieurs versions d’Apache, je vous conseille de passer par le menu de WampServer : Clic gauche sur l’icône > Apache > httpd.conf.
Placez vous en bas de celui-ci et ajoutez :
Include "C:/Wamp/hosts/myhost.conf"
Il vous suffit dès lors de relancer les services pour que le changement soit pris en compte. Vous devriez maintenant être en mesure d’accéder à votre site via l’adresse : http://myhost.loc. Cependant si vous tentez d’accéder à l’adresse http://localhost/, vous êtes maintenant redirigé également vers votre hôte « myhost.loc ».
Pour corriger ça, il faut créer un virtual host pour « localhost ». On reprend donc la même logique :
1. Créer un fichier localhost.conf dans notre dossier hosts contenant :
NameVirtualHost localhost
<VirtualHost localhost>
DocumentRoot "C:/Wamp/www/"
DirectoryIndex index.php
<Directory "C:/Wamp/www/">
AllowOverride All
Allow from All
</Directory>
Include "C:/Wamp/alias/*"
</VirtualHost>
A la différence de celui que l’on a fait pour « myhost.loc », vous pouvez remarquer que j’ai inclus les alias dans cet hôte.
2. Configurer Apache
Commencez par supprimer la ligne suivante qui est devenue inutile :
Include "C:/Wamp/alias/*"
Puis incluez votre VirtualHosts « localhost.conf » en première position :
Include "C:/Wamp/hosts/localhost.conf"
Include "C:/Wamp/hosts/myhost.conf"
Il ne vous reste donc plus qu’à relancer les services pour pouvoir accéder à vos deux domaines.
5. Maintenance
Pour gérer vos hôtes, c’est très simple : il suffit d’éditer le fichier httpd.conf et de commenter/décommenter les lignes d’inclusion pour désactiver/activer un hôte.