erwan83 a écrit :
Comment PHP fait il pour appeler une page dont même le nom est "virtuel" ?
|
C'est pas qu'une question PHP.
D'abord, ton nom de domaine foo.example.com, faut qu'il pointe vers l'IP de ton serveur Web. Pour ça, faut voir le serveur DNS que t'utilises, et comment déclarer un nouveau sous-domaine de manière scriptable (et publique, donc il te faudra un serveur DNS toujours accessible, sécurisé, et bien configuré -et donc, déclaré au registrar qui s'occupe de ton domaine, s'ils supporte ça). J'ai jamais eu à faire ça, et j'ai pas encore bien vu la configuration des serveurs DNS, donc je peux pas te dire grand chose de plus.
Ensuite, faut qu'Apache associe ce nom de domaine à ton sites Internet. Pour ça, faut rajouter un truc genre "ServerAlias *.example.com", dans le VirtualHost de ton site, et redémarrer Apache (une seule fois, bien entendu).
Et finalement, une fois que tes utilisateurs arrivent sur ton site, tu peux utiliser "$_SERVER['HTTP_HOST']", dans PHP, pour avoir le nom de domaine utilisé par l'utilisateur, pour accéder au site. Donc, par exemple, "foo.example.com". À partir de là, renvoie ce que tu veux.
À noter que "$_SERVER['HTTP_HOST']" peut contenir le port du site, donc vaut mieux prévoir et le virer s'il est présent (enfin en général, il est pas envoyé, si le site est sur le port par défaut).
Vérifie aussi bien, que le nom de domaine ne contient que "[a-zA-Z0-9\-\.]+", et que le nom de l'utilisateur commence par une lettre, et pas par un point (enfin que le nom d'utilisateur est pas "..", quoi... ça pourrait poser un problème de sécurité, selon comment est organisé le reste du système). Je suppose qu'il devrait pas arriver jusqu'à PHP, s'il contient autre chose, mais on sait jamais...
Si tu veux renvoyer vers des sites/pages réelles, tu peux aussi le faire directement depuis Apache, sans PHP, avec mod_rewrite (dans un .htaccess, à la racine du site, ou dans une section <Directory>, de la racine du site).
Un truc genre:
RewriteCond %{HTTP_HOST} ^([a-z0-9\-]+)\.example.com(:[0-9]+)?$ [nocase]
RewriteRule ^.*$ /%1/$0
|
... qui redirigera, par exemple "http://foo.example.com/Bar.xhtml", vers "/foo/Bar.xhtml", en interne (donc l'utilisateur continuera à voir l'adresse originale). Comme ça, tu peux mettre tous les fichiers de l'utilisateur, dans un répertoire précis (enfin dans ce cas, tu pourras aussi accéder aux répertoires, en utilisant "http://example.com/foo/", par exemple, si ton VirtualHost utilise "example.com" comme nom par défaut... dans ce cas, si tu le veux pas -s'pas super pour les moteurs de recherche, si quelque laisse traîner ce type d'adresse-, faudra rajouter quelques règles, pour interdir les requêtes vers les répertoires, si HTTP_HOST est example.com... sauf pour les quelques répertoires autres, si t'as un site sur example.com).
(J'ai la flemme de vérifier si le "%1" marche bien, mais je suppose que ça devrait aller... s'pour récupérer la première partie du nom de domaine du RewriteCond du dessus).