Qu'est ce qui ne va pas dans cette URL rewritting ?

  • Auteur de la discussion Auteur de la discussion renaud63
  • Date de début Date de début
WRInaute discret
Bonjour à tous,

Une erreur 404 sur cette URL rewritting, je n'en trouve pas la cause :

Code:
URL de base : achat/produit_details.php?id=2&catid=20&nom=Je-joue-au-Cluedo
URL réécrite : achat/produit-details-2-20.Je-joue-au-Cluedo.html

htaccess
RewriteRule ^produit-details-([0-9]+)-([0-9]+)\.(-[a-zA-Z]+)\.html$  
/achat/produit_details.php?id=$1&catid=$2&nom=$3 [L]

Merci du coup de main, et bonne journée.
 
WRInaute impliqué
Il manque le répertoire dans la partie gauche il me semble:

Code:
RewriteRule ^achat/produit-details-([0-9]+)-([0-9]+)\.(-[a-zA-Z]+)\.html$ 
/achat/produit_details.php?id=$1&catid=$2&nom=$3 [L]
 
Nouveau WRInaute
Bonjour à tous,

Je pense que le souci vient de la règle pour la 3è partie: (-[a-zA-Z]+)

Il faudrait le remplacer par ([-a-zA-Z]+) ainsi, cela permettrait de gérer plusieurs occurences du "-", ce qui est le cas pour Je-joue-au-Cluedo

Amicalement,
 
WRInaute discret
Merci à vous, c'est impec !
C'est en effet l'expression régulière qui ne fonctionnait pas...

J'aurais besoin d'un conseil :

Je génére un fichier sitemap.xml à la volée avec PHP et il est bien reconnu par Google, bien que les liens soient du type index.php?id=2&page=1

Maintenant que j'ai reécrit les liens avec URL rewritting et les htaccess....et ce qu'il faut que je mette les nouveaux liens aussi dans le sitemap.xml ? Est ce important ?

Merci de vos lumières !
:idea:
 
WRInaute passionné
il faut renommer tous les liens (y compris dans le sitemap) mais également faire une redirection 301 des anciennes url vers les nouvelles. Pour cela le plus simple est de faire un test au début du script php :
Code:
$la_bonne_url = '/achat/produit-details-2-20.Je-joue-au-Cluedo.html';
if ($_SERVER['REQUEST_URI'] != $la_bonne_url) {
	header('Status: 301 Moved Permanently', false, 301);
	header('Location: ' . $la_bonne_url);
	exit;
}
Il faut bien sur déterminer "la bonne url" à partir des paramètres.
 
WRInaute discret
Humm...ça se corse...
Cette redir 301 est utile pour que Google soit à jour avec les nouveaux liens ? Pour ne pas perdre son référencement ?

Parce que en fait, la plupart de mes liens sont générés dynamiquement par une boucle qui lit une table...alors pas facile, le header en début de script...

8O


Je vais chercher des tutos sur le sujet pour essayer de comprendre.

En tout cas, merci !
 
WRInaute passionné
renaud63 a dit:
Humm...ça se corse...
Cette redir 301 est utile pour que Google soit à jour avec les nouveaux liens ? Pour ne pas perdre son référencement ?
il ne faut pas deux pages avec le même contenu. il faut donc indiquer a google que la page a été renommée

renaud63 a dit:
Parce que en fait, la plupart de mes liens sont générés dynamiquement par une boucle qui lit une table...alors pas facile, le header en début de script...
si tu es capable de déterminer le lien dans la boucle, tu peux copier ce code juste avant le code que je t'ai donné pour déterminer la bonne url non?
 
WRInaute discret
Oui oui, en théorie c'est jouable...

Je pensais simplement que la fonction header allait poser problème à certains endroits puisque j'envoie du HTML avant l'affichage du contenu lu par la boucle... et il faut que je mette la redir 301 dans la boucle.
Il faut que je teste, parce que, à mon avis je risque de prendre un gros warning en pleine tête !

:?
 
WRInaute passionné
le code est a mettre avant tout envoi de donnée au navigateur (au début de produit_details.php). Sinon il faut utiliser ob_start()

il faut faire :
Code:
$la_bonne_url = '/achat/produit-details-' . $_GET['id'] . '-' . $_GET['catid'] . '.' . $_GET['nom'] . '.html';
if ($_SERVER['REQUEST_URI'] != $la_bonne_url) {
   header('Status: 301 Moved Permanently', false, 301);
   header('Location: ' . $la_bonne_url);
   exit;
}
 

➡️ 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