Simuler un sous domaine url rewritting

WRInaute passionné
j'ai eu besoin d'un truc similaire pour mes blogs et ce que j'ai fait est une autre facon de voir:

tous mes sous domaines vont dans un sous dossier de mon site
et mes pages dedans utilise une variable en php qui trouve le pseudo dans le domaine...
 
WRInaute accro
Je suis pas sur qu'on puisse utiliser le rewriting pour simuler des sous domaines. de toute façon ça serait une horreur pour le référencement, un sous domaine étant considéré comme un site différent du principal pour les moteurs.
 
Nouveau WRInaute
merci pour vos reponses rapides

pour mitirapa,

oui mais tu doit surement crée un sous domaine par membre .
Mais moi je n'ai pas envie d'avoir d'adherence cote serveur.

Ce que je voulais juste savoir c'est a propos de ma regle .
RewriteRule http://localhost/(-[a-zA-Z]*).example.com$
http://localhost/www.example.com/page.php?pseudo=$1 [L]

ou
RewriteRule ^(-[a-zA-Z]*).example.com$
www.example.com/page.php?pseudo=$1 [L]

Est elle possible ?
si oui pourquoi n'est elle pas correct ?

Merci d'avance
 
WRInaute passionné
iometrine a dit:
merci pour vos reponses rapides

pour mitirapa,

oui mais tu doit surement crée un sous domaine par membre .
Mais moi je n'ai pas envie d'avoir d'adherence cote serveur.
nan c'est des alias illimité... donc 2/3 lignes a mettre dans ton httpd puis basta
 
Nouveau WRInaute
Déja il faut ajouter l'entrée * dans ton dns, pour que tous les sous domaines pointent sur l'ip de ton serveur.
Ensuite les regles sont à mettre dans ton httpd.conf
Avec un truc du genre
RewriteMap lowercase int:tolower
RewriteCond ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.exemple\.com$ [NC]
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.exemple\.com(.*) /var/www/users/$1$2 [L]

Ainsi tout sous domaine de la forme www.toto.exemple.com affichera le contenu du dossier var/www/users/toto
 
Nouveau WRInaute
merci thepsy,

mais je cherche a faire

toto.exemple.com var/www/users/page.php?id='toto'

alors j'ai essayé ce que tu m'as dit en le modifiant un peu mais sans succes:

RewriteRule ^([^.]+)\.exemple\.com(.*) /var/www/users/page.php?id=$1 [L]

mais ca marche pas,j'ai l'impression qu'il ne passe jamais dedans et qu'il cherche sur le serveur "toto.exemple.com" quoi qu'il en soit !!!!
c 'est quoi l'erreur ?
merci d'avance
 
Nouveau WRInaute
Tu a bien ajouté l'entré * a ton dns?
Ou tu fais tes test en local?

dans tout les cas les regles doivent etre dans une section virtualhost de ton httpd.conf.
Dans ton cas

<VirtualHost tonip>
ServerName user.exemple.com #doit etre défini et different du nom du serveur principal
RewriteEngine on

RewriteMap lowercase int:tolower
RewriteCond ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
RewriteCond %{HTTP_HOST} ^[^.]+\.exemple\.com$ [NC]
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.exemple\.com(.*) http://www.exemple.com/page.php?id=$1 [L]

</VirtualHost>

remplace juste tonip par l'ip de ton serveur et dis ce que ça donne

Parcontre les url du type http://toto.exemple.com/image.jpg ne pouront pas marcher directement puisque toutes les requettes seront redirigé sur l'url http://www.exemple.com/page.php?id=toto, tu devras adapter la regle
 
Nouveau WRInaute
Désole,
car je ne t'avais pas dit que je fonctionnais en local, car je prépare un peu mon site en fonction de ca.

Alors pour info , je suis sous windows, en local et l'url exacte est :

http://localhost/toto.test.com/
===>
http://localhost/www.test.com/test.php?id=toto

et j'ai un vrai repertoire sur le disque "www.test.com" a la racine de www

par contre tu as mis ca :
<VirtualHost tonip>
ServerName user.exemple.com

mais je souhaite justement que ma regle remplace ca , car j'ai pas envie de creer ces lignes a chaque inscription de membres et d'avoir d'adhérence sur le serveur.

voila tu sais tout. merci d'avance. :)
 
Nouveau WRInaute
Le "ServerName user.exemple.com" est obligatoire, car chaque virtual host doit avoir un servername, mais, dans ce cas, repondra à tout les sous domaines correspondant à la regle.

Tu es en local, et sous windows...
Ce que tu veux faire c'est des sous domaines, l'url http://localhost/toto.test.com/ n'est pas un sous domaine, mais un répertoire.

Si tu veux faire des tests, il va falloir ruser. En gros faire croire a windows que l’adresse toto.exemple.com corresponds a l’ip te ta machine.
Pour cela ouvre ton fichier C:\windows\system32\drivers\etc\hosts et rajoute les lignes suivantes
127.0.0.1 www.exemple.com
127.0.0.1 toto.exemple.com

Cela peut paraître complexe, mais c’est la façon la plus simple de tromper le dns de windows. Et ne t’inquiètes pas, sur ton serveur de prod l’entré dns * feras ça pour toi.

J’oubliais, tu dois aussi ajouter la condition suivante
RewriteCond %{HTTP_HOST} !^www.exemple\.com$ [NC]
Pour que le sous domaine www, ne soit pas traité en tant que user.
Ainsi que la ligne
NameVirtualHost 127.0.0.1
dans ton httpd.conf, pour indiquer à apache sur quel ip il doit gerer les virtualhost

Je viens de tester ça en local, tout fonctionne…

Apres, pour ce que tu veux faire, la solution que je te propose est peut-être une usine à gaz.
Si tu veux seulement afficher une page par sous domaine, la solution de Mitirapa est la plus adaptée.
 
Discussions similaires
Haut