Aller au contenu
salimbo

URL Rewriting, Sous-domaines et .htaccess

Noter ce sujet :

Recommended Posts

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 ;-)

Partager ce message


Lien à poster
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 :(

Partager ce message


Lien à poster
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:

Partager ce message


Lien à poster
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 ;)

Partager ce message


Lien à poster
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 ?

;-)

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

Comment faire pour traiter séparément le www ??

Je suis tombé dans ce piège, il le prend effectivement pour un pseudo ... ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
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]

Partager ce message


Lien à poster
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 ;-)

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • Contenu similaire

    • Par kevinjoseph
      Bonjour, j’ai un gros problème sur mon site Wordpress . Du jour au lendemain, mon site wordpress fais une redirection vers un autre site wordpress que j’ai crée ,sans que je touche à quoi que ce soit. Quand j’essai d’aller sur l’admin pour désactiver les plugins et voir d’où peut venir le problème. Impossible d’accéder, sa me redirige vers l’admin de l’autre site. Au final il est impossible que j’accède au site via (google, la bare de recherche, les favoris, l’admin…) pour voir ce qu’il fonction pas, j’ai juste accès au FTP. J'ai essayé de voir d'où pouvez venir ce bug en supprimant les plugins, le théme, mes derniers modifications, regarder sur le .htaccess si il y avais quelque par le nom de domaine de l'autre site écrit. Ca n'a rien changer, le site continue de ce rediriger automatiquement vers l'autre site. Si vous avez une idée d’où sa peut venir ou comment faire pour arranger ça et surtout comment éviter que sa ce reproduise. Sa m’aiderai beaucoup, merci d’avance.
      voici le code du .htaccess:
       
      # BEGIN WordPress
      <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]
      </IfModule>

      # END WordPress
      ~   Ludovic • 16:28    
    • Par leobk
      Bonjour,
       
      J'ai un sous-domaine www.fr.monsite.com dédié pour la réservation des vols
      j'ai redirigé récemment ce sous-domaine vers le site principal www.monsite.com et le nombre des erreurs 404 a explosé
      un nombre énorme d'URLs de type :
      www.fr.monsite.com/fr/vols/index?f_type=01&f_departure=TLS&f_destination=DJE&f_date_from=08/09/2013&f_date_to=22/09/2013&f_flexibility=3&f_paxs_adults=2&f_paxs_childs=0&f_paxs_infants=0
      redirigent vers :
      www.monsite.com/fr/vols/index?f_type=01&f_departure=TLS&f_destination=DJE&f_date_from=08/09/2013&f_date_to=22/09/2013&f_flexibility=3&f_paxs_adults=2&f_paxs_childs=0&f_paxs_infants=0
       
      L'URL de destination est biensur introuvable 404, puisque les variables utilisés dans les deux sites ne sont pas identiques
      Voici la structure d'URL si on fait une recherche de vol sur le site principal :
      https://www.monsite.com/fr/resa?depart=SXF&arrivee=NBE&aller=2017-11-10&retour=2017-11-30&adultes=1&enfants=1&bebes=0&departureDateTime_D=&arrivalDateTime_D=&departureDateTime_R=&arrivalDateTime_R=&fareGroupName=&fareGroupName_R=&sens=2&currency=EUR&airline=&flightNumber=&flight=&flight_retour=&webview=0&felxibilite=2
       
       
      existe-il un moyen pour rediriger l'ensemble des URLs dynamiques du sous-domaines vers une URL statique du domaine principale (autre que l'accueil)?
       
       
    • Par PieceMobile
      Bonjour,



      J'espère que vous allez tous bien.



      Auriez vous une solution pour rediriger ( via une règle htaccess par exemple ) :



      http://www.mon-site.com/blabla.html?ps_mobile_site=1



      vers : http://www.mon-site.com/blabla.html



      A mon avis, s'agissant d'un paramètre d'URL, de ce que j'ai cru comprendre -a mon petit niveau- c’était pas possible, mais ça me dépannerai pas mal si l'un d'entre vous avait une idée.



      Merci d'avance





    • Par aurelien59
      Bonjour, Je me permet de poster ce problème sur ce forum en plus de l'avoir posté sur un autre. Le problème survient sur un site codé en dur. Depuis plusieurs mois après la mise en place de redirection, je rencontre un problème. La redirection a été mise en place pour rediriger simplement les pages ayant un underscore vers un tiret. Par exemple page_1.php vers page-1.php Dans Google webmasters tools, zone "Exploration", > Erreurs d'exploration > le nombre des URL non suivies à augmenter de manière considérable sur ordinateurs et smartphone.

      Voici un exemple de page contenant l'erreur : page-1.php/page-a.php (alors que la page correcte est page-1.php, la page page-a.php est présente sur le site en racine). Lorsque je clic sur l'url d'erreur, dans l'onglet "Référencée sur". Les url qui apparaissent sont : http://www.monsite.fr/page-2.php/page-b.php'>>http://www.monsite.fr/page-2.php/page-b.php et http://www.monsite.fr/page-2.php/page-c.php'>>http://www.monsite.fr/page-2.php/page-c.php (non indexés sur Google). Voici l'extrait du .htaccess ErrorDocument 404 http://www.monsite.fr/404.phpRewriteEngine onRewriteCond %{HTTP_HOST} ^monsite.fr$RewriteRule ^(.*) http://www.monsite.fr/$1 [QSA,L,R=301]RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]RewriteRule ^(.*)\.php/$ http://www.monsite.fr/$1.php[L,R=301]RewriteRule ^(.*)\.php/(.*)\.php$ http://www.monsite.fr/$1.php[R=301]RewriteCond %{REQUEST_FILENAME} -s [OR]RewriteCond %{REQUEST_FILENAME} -l [OR]RewriteCond %{REQUEST_FILENAME} -dRewriteRule ^.*$ - [NC,L]RewriteRule ^.*$ /404.php [NC,L] Merci beaucoup pour votre aide.
×