Aller au contenu

Sujets conseillés

Posté

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

Posté

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.

Posté (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... :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
Posté

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

Posté (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 +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
Posté

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

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

Posté

Clair que s'il n'y a pas de query_string, Apache ne va pas en inventer une :P

C'est bon dans ce cas ;)

Posté

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

Posté

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]

Posté

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]

:)

Posté

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

Posté

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 ?

:)

Posté (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é par Valdun
Posté

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

Posté

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

Veuillez vous connecter pour commenter

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



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