www.RiffZone.net
code.RiffZone.net
login.RiffZone.net
Retour au Sommaire

Des sous-domaines en wildcards

La plupart des sites se contentent d'un domaine en www.monsite.com, d'autres (dont moi-même) multiplient les sous-domaines à tort et à travers; et trouvent que déclarer chaque sous-domaine dans la zone DNS puis dans les VHosts Apache c'est très fatiguant, et puis il faut attendre la propagation de la zone, bref c'est d'un ennui mortel.

Heureusement, il y a les wildcards, aussi bien côté DNS que côté Apache, nous allons donc voir comment gérer cette profusion de sous-domaines de manière générique, ainsi il suffira de créer un sous-dossier dans notre arborescence sur le serveur pour que le dit dossier soit automatiquement (et instantanément) reconnu comme un sous-domaine de notre site.

Prenons l'exemple de riffzone.net, sa zone DNS contient les lignes suivantes pour ce qui concerne le site web:

@ IN A 123.123.123.123 * IN CNAME riffzone.net. www IN CNAME riffzone.net.

La ligne importante est bien entendu la deuxième, où le caractère * signale que tous les sous-domaines renverront par défaut l'adresse IP déclarée en première ligne. Aucune subtilité là-dedans, voyons la partie Apache, notablement plus velue.

Pour rappel, après chaque modification de votre VHost, n'oubliez par de recharger la configuration d'Apache:

service apache2 reload

Ceci étant dit, commençons par les quelques lignes suivantes:

<VirtualHost *:80> DocumentRoot /var/www/riffzone.net ServerName riffzone.net ServerAlias *.riffzone.net </VirtualHost>

Là encore, que du classique, on déclare notre domaine et le chemin de son dossier racine sur le serveur; tout comme dans la zone DNS, un caractère * permet de spécifier tous les sous-domaines de riffzone.net. A ce stade, le domaine et tous ses sous-domaines serviront le même contenu situé à la racine du site. C'est un début, mais on veut que chaque sous-domaine serve le contenu d'un dossier de même nom sous la racine du site; par exemple, le dossier /var/www/riffzone.net/www contiendra les fichiers du domaine www.riffzone.net, le dossier /var/www/riffzone.net/photo contiendra les fichiers du domaine photo.riffzone.net et ainsi de suite.

Pour cela, nous allons devoir utiliser le mécanisme de réécriture d'URL d'Apache. Il utilise le module rewrite, donc s'il n'est pas activé sur votre serveur il faudra probablement exécuter ces quelques commandes:

a2enmod rewrite service apache2 reload

La ligne "RewriteEngine on" active le module d'URL Rewriting, les lignes suivantes font le lien entre les sous-domaines et les dossiers de même nom sous le dossier racine du site, l'ensemble est assez lisible:

<VirtualHost *:80> DocumentRoot /var/www/riffzone.net ServerName riffzone.net ServerAlias *.riffzone.net RewriteEngine on RewriteCond %{HTTP_HOST} ^([^\.]+)\.riffzone\.net RewriteCond /var/www/riffzone.net/%1 -d RewriteRule ^(.*) /%1/$1 [L] </VirtualHost>

A ce stade, on a terminé, du moins par rapport à l'objectif que l'on s'était fixé. Maintenant, je voudrais rajouter deux petites fonctionnalités intéressantes, à savoir deux pages personnalisées pour les erreurs 404 (page non trouvée) et 403 (page interdite), ainsi que la désactivation du listing automatique du contenu d'un dossier.

Pour la désactivation du listing automatique, on rajoute les lignes suivantes:

<directory /var/www/riffzone.net> Options -Indexes </directory>

L'option est récursive, elle s'appliquera également à tous les sous-dossiers.

Pour les pages d'erreur personnalisées, c'est plus compliqué, notamment à cause de notre système de sous-domaines, c'est la raison pour laquelle le sujet est traité ici.

Les deux pages personnalisées seront placées aux emplacements suivants:

/var/www/riffzone.net/403.php /var/www/riffzone.net/404.php

Pour quelles soient prises en compte, il va falloir rajouter deux groupes de spécifications, d'abord les classiques clauses ErrorDocument:

ErrorDocument 403 /403.php ErrorDocument 404 /404.php

Mais avec notre système de sous-domaines ça ne suffirait pas, il nous faut rajouter dans la section d'URL Rewriting:

RewriteCond %{HTTP_HOST} ^([^\.]+)\.riffzone\.net RewriteRule ^/403.php$ /403.php [L] RewriteCond %{HTTP_HOST} ^([^\.]+)\.riffzone\.net RewriteRule ^/404.php$ /404.php [L]

Voilà, c'est terminé, pour de bon cette fois. Voici notre VHost au complet après ces dernières modifications:

<VirtualHost *:80> DocumentRoot /var/www/riffzone.net ServerName riffzone.net ServerAlias *.riffzone.net ErrorDocument 403 /403.php ErrorDocument 404 /404.php <directory /var/www/riffzone.net> Options -Indexes </directory> RewriteEngine on RewriteCond %{HTTP_HOST} ^([^\.]+)\.riffzone\.net RewriteRule ^/403.php$ /403.php [L] RewriteCond %{HTTP_HOST} ^([^\.]+)\.riffzone\.net RewriteRule ^/404.php$ /404.php [L] RewriteCond %{HTTP_HOST} ^([^\.]+)\.riffzone\.net RewriteCond /var/www/riffzone.net/%1 -d RewriteRule ^(.*) /%1/$1 [L] </VirtualHost>

Le site RiffZone.net fonctionne réellement avec ce VHost (plus quelques autres spécifications qui sortent du cadre de cet article), vous pourrez tester les pages d'erreur personnalisées en cliquant par exemple sur les deux liens suivants:

Pour une erreur 404: http://static.riffzone.net/nawak ou https://static.riffzone.net/nawak
Pour une erreur 403: http://static.riffzone.net ou https://static.riffzone.net