22 juin

Emuler un sous-domaine avec le mod_rewrite

Hello !

Beaucoup me demande [et cela avait d'ailleurs donné lieu à un article sur mon ancien blog] comment faire pour créer des adresses Web à la Skyblog ou Over-Blog (du type : http://nomdutilisateur.votresite.com).

La solution est relativement simple mais nécessite quand même quelques pré-réquis :

  • Votre hébergeur doit accepter les htaccess. Pour tester si c’est bien le cas, entrez un texte simple (par exemple : « test ») dans un fichier appelé .htaccess que vous placerez à la racine de votre site. Si une erreur 500 apparait, les .htaccess sont acceptés.
  • Votre hébergeur doit avoir activé le mod_rewrite. La façon la plus simple et rapide de le vérifier est de regarder la section Apache Loaded Modules dans le phpinfo().
  • Note : si vous êtes en hébergement dédié, ou que vous avez accès au httpd.conf, vous pouvez l’activer vous même en ajoutant ces deux lignes de codes (n’oubliez pas de redémarrer Apache après avoir modifié le httpd.conf :) ) :
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c

Ensuite, vous devez paramétrer votre http.conf ainsi que vos enregistrements DNS pour que tous les noms de domaines (en fait, ceux qui nous intéressent sont ceux qui n’existent pas réellement) pointent vers votre compte. Il vous faudra alors ajouter « *.mon-domaine.com » (où mon-domaine.com correspond à votre site) en alias de votre compte dans le fichier httpd.conf ainsi qu’en enregistrement DNS. Le caractère * est un caractère « joker » qui va prendre en compte tous vos sous domaines :) .

Si toutes les vérifications ci-dessus se sont avérées être positives, on va passer à la suite.  Créez un fichier .htaccess dans lequel vous allez mettre le code suivant :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.mon-domaine.com
RewriteCond %{HTTP_HOST} ([^.]+)\.mon-domaine.com
RewriteRule ^(.*)$ /index.php?user=%1

Veillez bien à y remplacer les deux occurences de mon-domaine.com par votre nom de domaine (sans les www) puis index.php?user= par le chemin réel de votre script.

Cette portion va vous permettre de transformer l’adresse http://nicolas.mon-domaine.com en http://www.mon-domaine.com/index.php?user=nicolas. Dès lors, vous allez pouvoir récupérer le nom d’utilisateur avec PHP (ou tout autre langage d’ailleurs) pour le traiter et afficher les infos correspondantes :) .

Pour aller plus loin, vous pouvez consulter le guide officiel dédié à l’URL Rewriting sur le site d’Apache ou encore ce texte (en anglais) pouvant vous apporter une aide sur les différentes façons de gérer les expressions régulières pour vos réécritures.

Nicolas.