Skip to main content

Émulation d'un sous domaine

L’émulation de sous-domaine est une pratique très utile pour les projets offrant par exemple un espace privé pour les membres, ou encore un SaaS. Bien que cela paraisse très compliqué, c’est relativement simple à mettre en oeuvre. Toutefois, il y a quand même quelques pré-requis liés à votre hébergeur :

  • Le serveur sur lequel votre projet sera hébergé doit utiliser un serveur HTTP Apache ou Nginx (du moins pour ce guide, je mettrais à jour si j’ai d’autres noms :-)).
  • Ce guide utilisera PHP, votre serveur doit donc pouvoir exécuter les scripts PHP.

L’étape suivant consiste à paramétrer votre nom de domaine afin qu’il redirige tous les sous-domaines inexistants vers votre hébergement. Cet aspect dépend en partie de votre bureau d’enregistrement. Vous pouvez sois essayer de créer un sous domaine *.votre-domaine.ext pointant vers votre hébergement, ou bien regarder si vous voyez une section « Créer un Catch-All ». Si vous êtes perdus, vous pouvez toujours contacter votre bureau d’enregistrement qui vous guidera.

Le guide se divise en deux parties. La première concerne Apache, la seconde Nginx. Vous pouvez donc tout de suite passer au serveur qui vous concerne.

Pour Apache

Nous allons tout d’abord paramétrer votre fichier vhost. Suivant votre version d’Apache et/ou votre configuration, votre vhost se trouve soit directement dans le fichier httpd.conf (ou apache2.conf), ou alors dans un dossier nommé /etc/apache2/sites-available.

Editez le fichier correspondant à votre site puis rajouter la ligne suivante dans la vhost :

(Pensez bien à remplacer « votre-domaine.ext » par votre nom de domaine hein…)

Le caractère « * », aussi appelé wildcard, est un caractère joker qui va prendre en compte tous les sous-domaines :).

Pour Nginx

Pour ce serveur, c’est un peu plus simple : tout va se faire dans le même fichier de configuration du serveur virtuel. Pour rappel, chaque serveur virtuel dispose d’un bloc server{ … } dans le fichier de configuration. Nos modifications vont se faire uniquement dans ce bloc.

Tout d’abord, nous allons modifier le server_name afin d’indiquer à Nginx que ce serveur accueillera tous les sous-domaines liés à un domaine particulier. Pour cela, nous y rajoutons (ou modifions) la ligne :

(N’oubliez pas de remplacer votre-domaine.ext par votre domaine réel)

Récupérer le sous-domaine avec PHP

A partir de maintenant, tous les sous-domaines de votre-domaine.ext seront pointés vers votre site, étant en quelque sortes des alias de www.votre-site.ext. Maintenant, la partie intéressante consiste à récupérer ce fameux sous-domaine afin de le traiter dynamiquement dans le script. Ainsi, si nous avons entré le sous domaine http://obama.nicosworld.fr, nous voulons pouvoir récupérer obama afin d’afficher le contenu qui lui correspond (ou la langue, ou le thème, tout dépend de l’usage que vous voulez faire de ce guide).

L’idée est de recherche la composante HTTP_HOST dans les variables d’environnement puis d’en extraire le sous-domaine. Pour cela, voici une petite méthode que vous pouvez intégrer dans vos scripts et utiliser directement.

Pour les petites explications :

  1. On parse $_SERVER[‘HTTP_HOST’] avec la fonction parse_url() qui va couper l’URL et créer un tableau avec les différentes composantes (host, port, chemin…).
  2. Ensuite, on scinde l’host en plusieurs morceaux afin de séparer la composante principale (votre-domaine.ext) du sous-domaine (ici, obama). Pour cela, nous faisons appel à la fonction explode() qui découpe une chaîne de caractères chaque fois qu’elle rencontre le caractère « . » (que nous avons spécifié en premier argument de fonction).
  3. Si l’étape ci-dessus s’est déroulée avec succès, et qu’un sous-domaine a été trouvé, la méthode va alors retourner le sous-domaine trouvé. Sinon, elle retournera simplement false.

Pour l’utiliser :

Voila pour le petit guide vous permettant d’émuler un sous-domaine. Dans certains projets, cela m’a sauvé bien du temps (vous vous imaginez créer 1000 sous-domaine car vous avez besoin de 1000 variantes ? Dingue non ?)

[Illustration : © kakaopor]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.