Aller au contenu

URL Rewriting, Sous-domaines et .htaccess


Sujets conseillés

Bonjour à tous,

je suis nouveau ici et ce post est mon premier alors soyez indulgent svp ... ;-)

Avant toute chose, je tiens à préciser que les réponses apportées sur ce sujet dans d'autre posts ne me correspondent pas.

Je suis sur le point de proposer aux membres de mon site un nouveau service: la possibilité d'avoir une page perso du type

[b]http://pseudo.mondomaine.com.

Cette page est censé redirigé l'utilisateur vers la page [b]http://www.mondomaine.com/index.php?pageperso=pseudo.

En fait, c'est plus une redirection plutot que la création d'un nouveau vhost. Le sous-domaine n'existe pas, le but est seulement de récupérer la premiere partie de l'url (pseudo) et d'effectuer une redirection.

Après recherche, j'ai trouvé 2 méthodes de procéder mais qui ne me vont pas totalement...:

1 - URL Rewriting:

Le module mod_rewrite est installé correctement sur mon serveur dédié. Quelques tests ont été fait avec mon fichier .htaccess, tout est bien installé. Cependant, cela ne fait pas exactement ce que je veux...

Voici le fichier .htaccess que j'ai déposé à la racine:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([a-zA-Z0-9]+)$ /index.php?pageperso=$1 [L]

Malheureusement, cela ne me donne pas le résultat voulu, cela effectue la redirection http://www.mondomaine.com/pseudo vers http://www.mondomaine.com/index.php?pageperso=pseudo,

or je souhaitais rediriger l'url http://pseudo.mondomaine.com vers http://www.mondomaine.com/index.php?pageperso=pseudo

Je sais qu'il y a quelques choses qui ne va pas dans mon htaccess, mais quoi ?? Je dois avouer que je vais pas tarder à me tirer les cheveux ...

2 - Script PHP:

J'ai trouvé une autre méthode plus simple à mettre en place sur ce forum http://www.webmaster-hub.com/index.php?sho...entry8310.

Le but est de récupérer en PHP la premiere partie de l'url (dans mon cas "pseudo"), puis d'effectuer une redirection en utilisant la fonction header(). Le problème de cette redirection est qu'elle n'est pas transparente pour l'utilisateur, en effet l'adresse de redirection apparait dans la barre d'adresse du navigateur.

Or je souhaite conserver l'adresse pseudo.mondomaine.com dans le navigateur.

Donc pour résumer:

En utilisant URL rewriting, la redirection est transparente mais je n'arrive pas à faire la redirection désiré. Besoin d'aide dans la rédaction de mon .htaccess ...

En utilisant une script PHP, la redirection n'est pas transparente. Y a t'il moyen d'effectuer une redirection transparente ??

Voila, j'ai essayer d'être clair, merci de me venir en aide svp...

Merci à vous ;-)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Le problème est que bind ne répondra pas lors d'une demande de l'url pseudo.mondomaine.com, tout simplement parce que ce sous-domaine n'existe pas et n'est pas déclaré dans la zone.

La seule possibilité que tu aies (et cela rejoint les autres posts qui traitent de ce sujet, quoique tu en dises) est de créer une entrée bind supplémentaire dans la zone du domaine.

Cette entrée devra se nommer * pour permettre tous les noms de sous-domaines et apparaître en fin de liste pour éviter de masquer les autres. C'est une entrée de type IN A avec l'adresse IP de ton serveur.

En plus, il te faudra utiliser les VirtualDocumentRoot, ce qui suppose l'utilisation du module vhost_alias.

En général, ce module n'est pas installé sur les serveurs mutualisés :(

Lien vers le commentaire
Partager sur d’autres sites

Merci Dan pour ta réponse ...

Je réponds un peu tardivement car je n'ai pas eu de notification par email...

Je suis sur un serveur dédié, et j'ai deja l'entrée DNS Wildcard (*) créé qui pointe vers l'adresse IP de ma machine.

En fait, aujourd'hui, voici ce que j'utilise meme si je n'en suis pas satisfait. C'est une combinaision de PHP et d'URL rewriting:

1 - l'entrée DNS * A xxx.xxx.xxx.xxx est créé

2 - l'utilisateur rentre son adresse http://pseudo.mondomaine.com

3 - script php dans mon index.php pour récupérer la premiere partie de l'url (pseudo dans mon cas).

4 - redirection en utilisant la fonction header () vers http://www.mondomaine.com/pseudo

5 - enfin, via url rewriting, j'interprete la précédente adresse web grace à mon fichier .htaccess contenant:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([a-zA-Z0-9]+)$ /index.php?pageperso=$1 [L]

Mon problème est que je souhaite conserver dans la barre du navigateur l'adresse web pseudo.mondomaine.com

Est ce possible en php ? avec url rewriting ? Je dois t'avouer que je tourne en rond...

Et au fait : Super ton forum ! :thumbsup:

Lien vers le commentaire
Partager sur d’autres sites

C'est possible avec le module vhost_alias.

Celui-ci te permet d'utiliser des VirtualDocumentRoot, et tu garderas de ce fait l'URL que tu veux en barre d'adresse.

Dan

PS: merci pour ton appréciation flatteuse ;)

Lien vers le commentaire
Partager sur d’autres sites

En fait, J'ai installé le module vhost_alias.

J'ai ajouté la directive suivante:

VirtualDocumentRoot /var/www/virtual/mondomaine.com/htdocs/pageperso/%1

J'ai lu que si je demande l'url "kiki.mondomaine.com", il faut que le répertoire "kiki" soit créé dans page perso.

Je n'ai eu que des page 404 en activant cela tout à l'heure ... Si le répertoire est créé, j'imagine qu'il faut un fichier index.html dedans ? Je dois t'avouer que je suis perdu..

Ce que je ne comprends pas c'est que je souhaite effectuer une redirection du type /index.php?pageperso=kiki plutot qu'une redirection vers un répertoire.

Peux tu m'éclairer sur la manip en utilisant VirtualDocumentRoot stp ?

;-)

Lien vers le commentaire
Partager sur d’autres sites

Il faut que le répertoire existe pour le VirtualDocumentRoot...

Mais c'est une action que tu peux faire lors de la création du compte.

Tu peux laisser le DocumentRoot à /var/www/virtual/mondomaine.com/htdocs/pageperso/ et utiliser le .htaccess de ce répertoire pour rediriger l'URL vers la page d'accueil du membre 'pseudo' : index.php/pageperso=pseudo

RewriteCond %{HTTP_HOST} ([a-z0-9A-Z]+).tondomaine.com
RewriteRule (.*) index.php?pageperso=%1 [L]

Attention à traiter différemment le www, sinon il le considérera comme un pseudo :P

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Je viens de tester cette solution.. mais j'obtiens une erreur 500:

La conf de mon VirtualHost est:

DocumentRoot à /var/www/virtual/mondomaine.com/htdocs/pageperso/
#VirtualDocumentRoot à /var/www/virtual/mondomaine.com/htdocs/pageperso/

Ensuite mon .htaccess situé àdans htdocs/pageperso/ est:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ([a-z0-9A-Z]+).mondomaine.com
RewriteRule (.*) index.php?pageperso=%1 [L]

et enfin le .htaccess situé dans htdocs/ est:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} !^dev\.mondomaine\.com$
RewriteRule ^([a-zA-Z0-9]+)$ /?q=n_viewprofile&pseudo=$1 [L]

Malheureusement, avec cette config, j'obtiens des erreurs 500 ... ???

Modifié par salimbo
Lien vers le commentaire
Partager sur d’autres sites

La règle du .htaccess de /htdocs ne te sert à rien ...

Tu peux traiter le www avant avec une condition supplémentaire, idem pour le sous-domaine dev que tu as.

Mais tu ne devrais pas tomber sur le www ou le dev, parce que leur DocumentRoot est différent et défini AVANT dans le fichier httpd.conf (du moins je l'espère :P )

Change ton .htaccess de pagesperso comme ceci, et supprime celui du niveau supérieur:

RewriteEngine on
RewriteCond %{HTTP_HOST} !(www|dev).meetarabic.com$
RewriteCond %{HTTP_HOST} ([a-z0-9A-Z]+).meetarabic.com
RewriteRule (.*) index.php?pageperso=%1 [L]

Lien vers le commentaire
Partager sur d’autres sites

J'ai fait les modifications nécessaires .. cependant:

- quand je tape kiki.mondomaine.com, je suis bien redirigé vers index.php mais cette page n'existe pas dans le repertoire /htdocs/pageperso/ mais elle est dans le repertoire /htdocs/ ===> résultat page d'erreur 404.

- quand je tape www.mondomaine.com ==> la condition du htaccess est bien prise en compte mais je vois donc le contenu du répertoire htdocs/pageperso/ et non le contenu de htdocs/ ==> je pense que le documentRoot doit resté dur htdocs/ et non htdocs/pageperso??

Qu'en penses tu ?

Deplus, peux tu éditer ton poste précédent et remplacer mon ndd par mondomaine.com stp ;)

Juste une derniere chose: ça avait l'air d'être sympa ce trip en monglofiere ;-)

Lien vers le commentaire
Partager sur d’autres sites

Je pense qu'on touche le bout..!

- J'ai modifié le DocumentRoot en /htdocs/ au lieu de /htdocs/pageperso/ précédemment.

- J'ai modifié le .htaccess du répertoire /htdocs/ pour :

ptions +FollowSymlinks

RewriteEngine on
RewriteCond %{HTTP_HOST} !(www|dev).mondomaine.com$
RewriteCond %{HTTP_HOST} ([a-z0-9A-Z]+).mondomaine.com
RewriteRule (.*) index.php?pageperso=%1 [L]

Cela fonctionne parfaitement à une chose près: les images de la pages ne s'affichent plus car le chemin n'est pa bon.

Je m'explique: si je suis sur la page kiki.mondomaine.com, les images pointes vers <img src=&quot;http://kiki.mondomaine.com/images/xxx.jpg">

Donc l'image ne s'affiche pas correctement... ;-(

Il faudrait que les images pointent vers <img src="http://www.mondomaine.com/images/xxx.jpg"> . Idem pour mon fichier CSS.

Je sais que je pourrais coder en dur l'adresse des liens, mais je souhaitais savoir si on pouvait utiliser une regle RewriteRule pour les images ..??

Merci d'avance,

Salim

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...