Je fais tourner un serveur web utilisant Ubuntu/Apache, et je cherche un moyen d'héberger dynamiquement des sous-domaines sur plusieurs domaines. Je me suis amusé avec Apache pendant quelques jours, et je n'ai pas réussi à trouver une solution complète.
Voici le flux de travail que je recherche :
-
Si HTTP_HOST contient le préfixe 'www', ignorez-le.
-
S'il inclut un sous-domaine, vérifiez si un dossier correspondant existe dans le dossier
~/server/
-
Si un dossier existe, définissez ce dossier comme la racine du document.
-
S'il n'existe pas, définissez
~/server/www
comme racine du document. -
Les sous-domaines à plusieurs niveaux doivent être dirigés vers le sous-domaine de base. Par exemple,
http://another.sub.domain.tld/
devrait avoir pour valeur par défaut~/server/sub
-
Si aucun sous-domaine n'est demandé, utilisez
~/server/www
Structure du dossier :
/home/ [domain w/o extension] /server/ [subdomain, default 'www']
Ejemplo: http://sub.domain.tld/
correspond à /home/domain/server/sub
Voici ce que j'ai obtenu jusqu'à présent, en utilisant le mod_vhost_alias :
UseCanonicalName Off
VirtualDocumentRoot /home/%-2/server/%-3
Cela seul est satisfaisant :
-
http://www.domain.tld/
- cherche~/server/www
-
http://subdomain.domain.tld
- cherche~/server/subdomain
-
http://www.subdomain.domain.tld
- cherche~/server/subdomain
Mais il ne satisfait pas http://domain.tld/
. (cherche ~/server/domain
)
En outre, si ~/server/subdomain
n'existe pas, il renvoie un 404.
En bref, je voudrais que chaque sous-domaine ait son propre dossier dans le dossier ~/server/
ou par défaut ~/server/www
si elle est inexistante.
Je veux éviter d'utiliser mod_rewrite, car il ne modifie pas la racine du document ; il ajoute simplement un répertoire à la requête. Cependant, je peux modifier la structure du dossier en dernier recours.