Du coté Redirection

Information sur l'article

Enregistré le 17 Juil 2008 - Vu 879 fois
Impression: Imprimer l'article
  • Sociale bookmarking: Digg ce code sur digg.com
  • Bookmark ce code sur del.icio.us
  • Partage ce code sur Facebook
  • Bookmark ce code sur Google
  • Bookmark ce code sur Yahoo
  • Ajoute Faire une redirection 301 des anciennes urls vers celle réécrites via .htaccess
Votre avis: 
 
Ecrit par :  forty
 

Faire une redirection 301 des anciennes urls vers celle réécrites via .htaccess


La technique de l’url rewriting a de nombreux avantages comme celui d’ajouter des mots clé dans l’url. Sa mise en place peut malheureusement être la cause de duplicate content (deux urls différentes ayant le même contenu). Les moteurs de recherche comme google peuvent sanctionner votre site dans ce cas. Il faut donc être vigilant et faire une redirection permanente (redirection 301) des anciennes urls vers les celles réécrites. Ainsi les anciennes urls sont désindexées des moteurs et remplacées par celles réécrites.

Prenons pour un exemple un cas de réécriture classique et nous procéderons ensuite aux redirection 301.

Avec fichier.php?id=1 réécrit en article-1.html, notre règle devrait avoir cette forme :




.01
.02
.03
 

RewriteEngine on
RewriteRule ^fichier-([0-9]+)\.html$ /fichier.php?id=$1 [L]
Maintenant ajoutons notre redirection 301 pour rediriger article.php?id=1 vers article-1.html. Pour faire cela, nous allons commencer par chercher l’Uri puis faire une redirection :
.01
.02
.03
.04
 

RewriteEngine on
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^fichier\.php$ /fichier-%1.html? [R=301,L]
Attention à ne pas oublier le ? à la fin sinon le paramètre id=1 va être ajoutés à notre url réécrite automatiquement. Le %1 représente la rétroréférence correspondant à la capture de l'id avec la directive RewriteCond.

Maintenant nous devons joindre ces deux règles tout en évitant de faire une boucle infinie. L’astuce consiste pour éviter de boucler d’ajouter un paramètre "rewriting" inutile mais qui évitera le premier test de redirection. Astucieux n’est-ce pas ?? et sans danger ;)
.01
.02
.03
.04
.05
.06
.07
.08
 

RewriteEngine on

RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteCond %{QUERY_STRING} !^(.*&)?rewriting(&.*)?$
RewriteRule ^fichier\.php$ /fichier-%1.html? [R=301,L]

RewriteRule ^fichier-([0-9]+)\.html$ /fichier.php?id=$1&rewriting [L]
Dans le cas ou nous avons ajouté des mots clé dans notre url réécrite cette méthode ne marche plus.

Voyez avec PHP pour les solutions de redirections avec un ou plusieurs arguments dans vos urls : finalisation 301.
Commentaires [9]
Nouveau message Invité
le 08 Juil 2009 à 15:06:00
ca ne marche pas;sur un serveur local : 1 fichier : fichier.php 1 fichier : test.php avec un lien :fichier.php?id=1 resultat : Not Found The requested URL /fichier-1.html was not found on this server.
Nouveau message forty
le 11 Juil 2009 à 22:27:00
avec wamp sur mon pc ca marche très bien. Les scripts sont peut-être dans des sous répertoires par rapport à la racine.
Nouveau message Invité
le 08 Fév 2011 à 08:59:00

Fonctionne pas non plus de mon côté ... Le paramètre 'rewriting' passe dans l'url ...

Nouveau message Invité
le 22 Juil 2011 à 19:06:00

Effectivement ce code n'est pas correct. Mais il m'a aidé à trouver LA solution :


 


RewriteCond %{THE_REQUEST} ?id=([0-9,a-z]+)s [NC]

RewriteRule ^fichier.php /article-%1.html? [R=301,L,NC]



RewriteRule ^article-([0-9,a-z]+).html? fichier.php?id=$1 [L,NS,NE,NC]


 


Notez que cette règle est pour l'exemple donné en début de page (fichier.php?id=1 réécrit en article-1.html).

Nouveau message Invité
le 22 Juil 2011 à 23:54:00

Bien que l'exemple que j'ai donné ci-dessus fonctionne parfaitement, je pense que j'ai fait 2 erreurs en oubliant les $ dans les 2 lignes Rewriterule (les experts confirmeront ou infirmeront). Donc le code bien écrit serait plutôt :


RewriteCond %{THE_REQUEST} ?id=([0-9,a-z]+)s [NC]

RewriteRule ^fichier.php$ /article-%1.html? [R=301,L,NC]



RewriteRule ^article-([0-9,a-z]+).html$ fichier.php?id=$1 [L,NS,NE,NC]


Encore une fois, je ne suis pas expert, mais d'après ce que j'ai lu ceci me semble plus correct.

Nouveau message forty
le 23 Juil 2011 à 13:46:00

 Pour que ca marche sans problème il faut soit ajouter la condition suivante à la redirection : 


 

RewriteCond %{QUERY_STRING} !^(.*&)?rewriting(&.*)?$

 

Soit modifier la condition actuelle :

 

RewriteCond %{QUERY_STRING} ^id=([^&]*)$

 
Nouveau message Invité
le 21 Juil 2012 à 03:10:00

Une fois les nouvelles pages sont indexées, faut il supprimer les anciennes via gg webmaster?,,,,,ou bien laissé le fichier htaccess comme il est???

Nouveau message forty
le 21 Juil 2012 à 06:45:00

 Tu ne peux pas supprimer d'anciennes page via GWT si elles sont redirigées. Il suffit d'attendre que googlebot fasse sont travail et prenne en compte la redirection.

Nouveau message Vulell
le 17 Mars 2017 à 15:13:00

 Y'a absolument rien qui marche :/

Ajouter un commentaire

RSS
Articles


RSS
commentaires

 
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
Offres d'emploi

Déposer vos articles

Déposer vos articles

Nous accueillons avec plaisir les articles et les critiques de livres, et nous encourageons les entreprises à contribuer avec les rapports d'industrie sur l'utilisation avantageuse de PHP. Vous pouvez également soumettre des articles de journaux et les publications de la presse professionnelle telles que les annonces de produits, et nous serons heureux de les publier sur notre site.

Contactez-nous