nostrad Posté 2 Juillet 2006 Posté 2 Juillet 2006 Bonjour, J'ai un petit probleme avec une redirection permanente dans mon htaccess. En fait je voudrai rediriger une url rewrite vers une autre rewrite. j'ai donc mis ca dans mon htaccess : Redirect Permanent /page_157.html http://www.ndd.com/page_165.html La redirection se fait bien, mais l'url donne ca : http://www.ndd.com/page_165.html?cat=page&id=157 J'ai rajouté un ? à la fin de la redirection : Redirect Permanent /page_157.html http://www.ndd.com/page_165.html? Ca m'enleve bien les parametres de la page, mais du coup ca me rajoute un ? a la fin de l url ' http://www.ndd.com/page_165.html? ' Quelqu'un aurai une idée du pourquoi, et de comment regler mon probleme ? Merci
Dan Posté 3 Juillet 2006 Posté 3 Juillet 2006 RedirectPermanent ajoute automatiquement le query string. Comme d'ailleurs toutes les redirections "externes"... dont le second argument est une URL complètement qualifiée (avec http://) Essaie avec: RewriteEngine OnRewriteRule /page157\.html http://www.ndd.com/page.165.html? [R=301,L] mais je pense que le ? restera lui aussi en fin d'URL.
Remi Posté 3 Juillet 2006 Posté 3 Juillet 2006 (modifié) Oui, j'ai déjà eu ce genre de bizarreries quand on a un Redirect suivi plus bas d'un Rewrite. Mon interprétation est la suivante : Quand l'url satisfait la ligne Redirect, le système enregistre la nouvelle cible mais l'interprétation du htaccess ne s'arrête pas. Il continue (avec l'url initiale)... et quand il rencontre le Rewrite un peu plus bas... paf! il rewrite ! La partie principale de l'url transformée est ignorée puisqu'il a gardé en mémoire la nouvelle url indiquée sur la ligne Redirect mais la Query String, elle, elle reste. Donc c'est ainsi que l'on se retrouve avec l'Url cible de la redirection + la Query String qu'aurait donnée l'url initiale rewritée (j'espère que tout le monde a suivi... ) Et tout ce petit monde repasse une nouvelle fois dans le htaccess et va être rewrité pour donner la bonne url à lire... Comme disait Gotlib (à propos de la vache qui n'arrête pas de ruminer) : "C'est comme le pot au feu, c'est meilleur à chaque fois"... L'idéal pour solutionner cela, serait de pouvoir arrêter le htaccess au niveau d'un Redirect (comme on le fait avec [L] dans les RW) mais cela n'existe pas à ma connaissance. Donc il faut traiter par le RW : - soit exclure l'ancienne url du RW - soit (le plus simple) ajouter une règle qui va faire le Redirect par RW et là, on lui colle le fameux [L] Dans ton cas, il faut enlever le Redirect et mettre dans ton RW (en premier) : RewriteRule page157\.html http://www.ndd.com/page.165.html [R=301,L] Modifié 3 Juillet 2006 par Remi
Dan Posté 3 Juillet 2006 Posté 3 Juillet 2006 Oui mais dans l'exemple de ta dernière règle, le Query_String sera ajouté vu que c'est une réécriture externe (à cause du R) comme je le mentionnais plus haut Dan
nostrad Posté 3 Juillet 2006 Auteur Posté 3 Juillet 2006 (modifié) D'abord merci pour vos réponses. J'ai essaye le code de dan, mais sans succés, la redirection ne se fait pas. Peut etre a cause des autres regles dans mon htaccess. Mon htaccess avant Redirect Permanent /page_157.html http://www.ndd.com/page_165.html?Options +FollowSymlinksRewriteEngine onRewriteRule ^([-A-Za-z]+)_([0-9]{1,4})([_0-9]{1,4}?)\.html$ page.php?categorie=$1&id=$2&page=$3 [NC,L] Mon htaccess apres Options +FollowSymlinksRewriteEngine onRewriteRule ^([-A-Za-z]+)_([0-9]{1,4})([_0-9]{1,4}?)\.html$ page.php?categorie=$1&id=$2&page=$3 [NC,L]RewriteRule /page_157\.html http://www.ndd.com/page_165.html? [R=301,L] Modifié 3 Juillet 2006 par nostrad
Dan Posté 3 Juillet 2006 Posté 3 Juillet 2006 Et oui... ta seconde règle ne passera jamais parce que page_157 est reconnu par la première règle. Il faut mettre cette règle au début de ton .htaccess, juste après le RewriteEngine On Dan
Remi Posté 3 Juillet 2006 Posté 3 Juillet 2006 Oui mais dans l'exemple de ta dernière règle, le Query_String sera ajouté vu que c'est une réécriture externe (à cause du R) comme je le mentionnais plus haut Si si ça marche, Dan, car son url de départ (celle qui est demandée) n'a pas de query string. Je le sais, j'ai eu le même problème que lui il y a un certain temps (mais bon, visiblement mon explication ne fait pas recette... tant pis pour moi... )
Dan Posté 3 Juillet 2006 Posté 3 Juillet 2006 Clair que s'il n'y a pas de query_string, Apache ne va pas en inventer une C'est bon dans ce cas
nostrad Posté 3 Juillet 2006 Auteur Posté 3 Juillet 2006 Ca ne marche toujours pas meme en changeant de place les regles toujours pareil Ben je crois que je vais laisser le : Redirect Permanent /page_157.html http://www.ndd.com/page_165.html? Même si ca me renvoit un ? à la fin de mon url. Merci Dan d'avoir essayer de m'aider
Remi Posté 4 Juillet 2006 Posté 4 Juillet 2006 Essaie ceci (toujours en premier des règles de Rewrite) : RewriteCond %{REQUEST_URI} ^/page_157\.html$RewriteRule (.*) http://www.ndd.com/page_165.html [L,R=301]
nostrad Posté 4 Juillet 2006 Auteur Posté 4 Juillet 2006 Super ca marche merci remi Bon moi je vais aller me coucher Merci a tous le monde
Valdun Posté 10 Juillet 2006 Posté 10 Juillet 2006 Bonjour, Pour repartir avec l'exemple de nostrad, j'ai une interrogation à propos du drapeau de redirection. Il a mis ce code pour indiquer qu'il y a une redirection permanente sur page_157.html : RewriteEngine onRewriteRule ^([-A-Za-z]+)_([0-9]{1,4})([_0-9]{1,4}?)\.html$ page.php?categorie=$1&id=$2&page=$3 [L]RewriteRule /page_157\.html http://www.ndd.com/page_165.html? [R=301,L] S'il avait voulu faire une redirection permanente sur toutes ses anciennes pages vers les nouvelles rewritées, pour indiquer aux robots qu'il doit mettre à jour son index et supprimer les vieilles pages, est-ce que c'est ce code qu'il aurait dû mettre : RewriteEngine onRewriteRule ^([-A-Za-z]+)_([0-9]{1,4})([_0-9]{1,4}?)\.html$ page.php?categorie=$1&id=$2&page=$3 [R=301,L]
Dan Posté 10 Juillet 2006 Posté 10 Juillet 2006 Non, parce que dans ce cas il dit aux moteurs d'indexer les URLs de type page.php?categorie=$1&id=$2&page=$3 ... et ce n'est pas ce qu'il cherche à faire
Valdun Posté 10 Juillet 2006 Posté 10 Juillet 2006 Non effectivement... Alors comment peut-on indiquer aux moteurs le lien entre les 'anciennes' pages qu'il a indexées et les 'nouvelles' rewritées automatiquement ?
Valdun Posté 12 Juillet 2006 Posté 12 Juillet 2006 (modifié) Peut-être comme ça ? : RewriteRule page.php?categorie=$1&id=$2&page=$3 ^([-A-Za-z]+)_([0-9]{1,4})([_0-9]{1,4}?)\.html$ [R=301,L] Modifié 12 Juillet 2006 par Valdun
Dan Posté 12 Juillet 2006 Posté 12 Juillet 2006 Non plus :!: On ne peut pas traiter les URLs avec variables (avec un QUERY_STRING) dans la première partie de l'expression. Il faut d'abord savoir comment étaient réécrites les anciennes URLs... et je pense qu'il souhaitait simplement rediriger la page_157 vers la page_165 ... Dan
Valdun Posté 12 Juillet 2006 Posté 12 Juillet 2006 Je me suis servi de son exemple pour illustrer mon cas J'ai mis en place une réécriture d'url sur mon site, seulement il n'y a pas de liens entre les anciennes adresses et les nouvelles pour indiquer aux moteurs de recherche qu'ils doivent faire le transfert. Comment puis-je mettre ça en place dans le .httaccess pour effectuer le transfert de PR ainsi que la suppression des anciennes adresses dans l'index de Google ? Merci
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant