Bonjour à tous
J'ai mis un fichier htaccess dans le dossier de mon site web, avec deux redirections pour eviter d'avoir dans l'adresse du navigateur ceci : detail-news.php?id_news=1 et l'autre formations-categorie.php?id_cat=1
Dans la table news j'ai ajoute un champ : url_seo_news et dans ma table cat_formation : url , c'est à partir de ces deux champ que je construit mon url de redirection.

RewriteEngine On
RewriteRule ^([0-9]+)-([a-zA-Z0-9\-]+)\.php$ detail-news.php?id_news=$1&url_seo_news=$2

RewriteRule ^([0-9]+)-([a-zA-Z0-9\-]+)\.php$ formations-categorie.php?id_cat=$1&url=$2

// afficher toutes les formations correspondantes à id_cat passé en paramètre
 <?php echo " <span style='color: forestgreen'><i><a href=' ".$row_Cat_formation['id_cat']."-".$row_Cat_formation['url'].".php'></i></span><br>".$row_Cat_formation['categorie']." </a><br> " ;
 ?>

Ce que je veux
RewriteRule ^([0-9]+)-([a-zA-Z0-9-]+).php$ detail-news.php?id_news=$1&url_seo_news=$2 ==> Affiche le détail de la news
RewriteRule ^([0-9]+)-([a-zA-Z0-9-]+).php$ formations-categorie.php?id_cat=$1&url=$2 ==> Affiche toutes le formations de cette catégorie

Afficher

Ce que j'obtiens
Ca fonctionne que si je laisse une ligne, mais lorsque je laisse les deux lignes c'est la première qui est pris en compte.
Merci de votre aide, peu être que l'écriture de ce fichier n'est pas le plus performant.

4 réponses


Il semble que le problème que tu rencontre est dû à la manière dont tu as défini tes règles de réécriture dans le fichier .htaccess. Lorsque tu as deux règles qui ont la même structure de correspondance (le même modèle d'URL), seule la première règle est prise en compte, ce qui explique pourquoi tu ne vois pas le comportement attendu pour les deux types de redirections.

Pour résoudre ce problème, tu peux ajuster tes règles de réécriture en utilisant des modèles d'URL distincts pour chaque type de redirection. Voici comment tu pourrais le faire :

RewriteEngine On

# Redirection pour afficher le détail de la news
RewriteRule ^news-([0-9]+)-([a-zA-Z0-9-]+)\.php$ detail-news.php?id_news=$1&url_seo_news=$2 [L]

# Redirection pour afficher toutes les formations d'une catégorie
RewriteRule ^formation-([0-9]+)-([a-zA-Z0-9-]+)\.php$ formations-categorie.php?id_cat=$1&url=$2 [L]

Avec ces règles de réécriture, tu utilises des préfixes différents ("news-" et "formation-") pour les deux types de redirections. Cela permet au serveur web de distinguer les deux règles et d'appliquer la redirection appropriée en fonction du préfixe de l'URL.
Ensuite, dans ton code PHP, tu peux utiliser les liens avec les préfixes correspondants :

<?php echo "<span style='color: forestgreen'><i><a href='news-" . $row_Cat_formation['id_cat'] . "-" . $row_Cat_formation['url'] . ".php'></i></span><br>" . $row_Cat_formation['categorie'] . "</a><br>"; ?>

ou

<?php echo "<span style='color: forestgreen'><i><a href='formation-" . $row_Cat_formation['id_cat'] . "-" . $row_Cat_formation['url'] . ".php'></i></span><br>" . $row_Cat_formation['categorie'] . "</a><br>"; ?>

Avec cette approche, tu éviteras les conflits entre les règles de réécriture et tu obtiendras le comportement souhaité pour les redirections.

Un grand merci leknoppix, d'avoir pris le temps de m'expliquer et d'avoir répondu pour mont problème.
J'essayes de faire comme tu me le conseilles et je reviendrai vers toi pour une réponse.
Bonne soirée
Jean-Pierre

J'avais quelques minutes à perdre ;)

N'hésite pas à nous dire si cela fonctionne ou pas.

Bon et bien ça marche impécable, j'ai appris quelque chose ce soir et j'en suis très reconnaissant.
Encore merci.