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
Pour une erreur 403: http://static.riffzone.net