Aller au contenu

Redirection 301 d'une url rewrite vers une url rewrite


nostrad

Sujets conseillés

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 :wacko: :

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

Lien vers le commentaire
Partager sur d’autres sites

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 On
RewriteRule /page157\.html http://www.ndd.com/page.165.html? [R=301,L]

mais je pense que le ? restera lui aussi en fin d'URL.

Lien vers le commentaire
Partager sur d’autres sites

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... :P )

Et tout ce petit monde repasse une nouvelle fois dans le htaccess et va être rewrité pour donner la bonne url à lire... :1eye:

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é par Remi
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 +FollowSymlinks
RewriteEngine on
RewriteRule ^([-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 +FollowSymlinks
RewriteEngine on
RewriteRule ^([-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é par nostrad
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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]

Lien vers le commentaire
Partager sur d’autres sites

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 on
RewriteRule ^([-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 on
RewriteRule ^([-A-Za-z]+)_([0-9]{1,4})([_0-9]{1,4}?)\.html$ page.php?categorie=$1&id=$2&page=$3 [R=301,L]

:)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

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...