redirection article_1_3_4 vers article-1-3-4

  • Auteur de la discussion Auteur de la discussion srangaya
  • Date de début Date de début
Nouveau WRInaute
Bonjour à tous,

Je profite que WRI soit de nouveau de retour pour m'inscrire et poser ma première question :D.

Est-ce que vous sauriez s'il est possible de faire une redirection permanante de type article_truc_machin_bidule vers article-truc-machin-bidule (il s'agit donc de remplacer tous les underscores par des tirets, sachant que le nombre d'underscore peut varier) en htaccess.

Pour ceux que ça intéresse, Google a référencé un tas d'articles en www.site.com/rubrique/article_truc_machin_bidule.php qui se nomment désormais www.site.com/rubrique/article-truc-machin-bidule.php. Ces nouvelles pages ont été référencés à nouveau mais j'aimerai créer cette URL pour ne pas que mes visiteurs ne tombent sur une page 404 :).

J'ai regardé les articles sur l'URL Rewriting mais je n'ai pas trouvé pour ce schéma.

Merci d'avance pour votre aide,

Stéphane R.
 
WRInaute impliqué
Tu peux faire une règle par nombre de soulignés présent. Pour deux par exemple:

Code:
RewriteRule rubrique/([^_]+)_([^_]+)_([^_]+).php rubrique/$1-$2-$3.php [L,R=301,QSA]
 
Nouveau WRInaute
Vap a dit:
Tu peux faire une règle par nombre de soulignés présent. Pour deux par exemple:

Code:
RewriteRule rubrique/([^_]+)_([^_]+)_([^_]+).php rubrique/$1-$2-$3.php [L,R=301,QSA]

Merci Vap ! Il y a un moyen pour que cela fonctionne pour quelque soit le nombre d'underscore ou il faut ajouter une ligne pour chaque nombre ?
 
WRInaute impliqué
Oui, une ligne par nombre.

L'expression régulière suivante correspond à un nombre illimité de soulignés. Le problème, c'est qu'on ne peut pas récupérer les sous expressions avec la syntaxe de mod_rewrite:

Code:
(([^_]+)_)*[^_])
 
WRInaute passionné
Si le nomre de "_" est indéfini, fait la redirection directement dans ton script qui gère ta rubrique (vu que je suppose que ça doit être généré depuis une bdd).
En début de script, un truc du style :
Code:
if (strpos($_SERVER['REQUEST_URI'], "_")!==false) {
   $re = substr($_SERVER['REQUEST_URI'], "_", "-");
   header("Status: 301 Moved Permanently", false, 301); 
   header("Location: ".$re); 
   exit(); 
}
 
WRInaute impliqué
J'ai trouvé comment faire ça uniquement avec mod_rewrite. Il suffit de faire une redirection externe, pour pouvoir traiter l'url bout par bout.

La règle suivante (testée en local) fait le boulot:

Code:
RewriteRule ^(.+)_([^_]+)\.php http://localhost/$1-$2.php [R=301]

Par exemple, -http://localhost/article_1_2_3_4.php est réécrit en -http://localhost/article-1-2-3-4.php
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut