Comment apache peut retrouver les variables dans l'url ?

Nouveau WRInaute
bonjour,

J'ai actuellement une ligne php :
Code:
echo "<a href=\"article-".$id."-".rewrite($nom).".html\">". $nom."</a>";

où la fonction rewrite formate la chaine de caractère pour une écriture URL propre (suppression des accents, des apostrophes etc.)

dans mon .htacces, j'ai cette ligne là :

Code:
RewriteRule ^article-([0-9]+)-([a-zA-Z0-9-]+)\.html$ /achat/article_details.php?id=$1 [L]

l'url "article-1-c-est-le-nom-de-l-article.html" est bien redirigée

Maintenant, j'aimerai que le mot "article" soit remplacé par la catégorie de l'article.

par exemple : "nom-de-ma-categorie-1-c-est-le-nom-de-l-article.html"

et là, c'est le drame.
J'ai essayé :

Code:
echo "<a href=\"".rewrite($cat['nom_fr'])."-".$id."-".rewrite($nom).".html\">". $nom."</a>";
avec RewriteRule
Code:
^([a-zA-Z0-9-]+)-([0-9]+)-([a-zA-Z0-9-]+)\.html$ /achat/article_details.php?id=$1 [L]

cela ne fonctionne plus.
Et j'ai une question subsidiaire : comment apache peut retrouver ses variables dans le bric a brac ([a-zA-Z0-9-]+)-([0-9]+)-([a-zA-Z0-9-]+) ? comment peut il savoir que -([0-9]+)- c'est l'id, puisqu'avant j'ai ([a-zA-Z0-9-]+)- ?

merci pour vos reponses.
 
WRInaute passionné
$1 correspond au premier motif entre parenthèse : la catégorie dans ce cas. Deux solutions : mettre $2 ou supprimer les premières parenthèses qui ne servent à rien si tu ne veux pas mémoriser le motif pour le réutiliser.
Code:
RewriteRule ^[a-zA-Z0-9-]+-([0-9]+)-[a-zA-Z0-9-]+\.html$ /achat/article_details.php?id=$1 [L]
 
WRInaute accro
le problème, c'est que dans 2 motifs de recherches on trouve un tiret, alors qu'il est aussi en dehors du motif (séparateur de mot), et ça risque de donner des résultats pas toujours bon, surtout si dans le titre de l'article on trouve des chiffres
 
WRInaute passionné
bien vu Leonick.
la règle la plus propre c'est (la première partie ne doit pas contenir de tiret) :
Code:
RewriteRule ^[^-]+-([0-9]+)-[a-zA-Z0-9-]+\.html$ /achat/article_details.php?id=$1 [L]
 
Nouveau WRInaute
Merci forty et leonick.... je n'avais pas saisi le principe des parenthèses. :oops: C'est plus clair maintenant.

Cela fonctione bien avec la ligne
Code:
RewriteRule ^[a-zA-Z0-9-]+-([0-9]+)-[a-zA-Z0-9-]+\.html$ /achat/article_details.php?id=$1 [L]

mais pas avec la dernière
Code:
RewriteRule ^[^-]+-([0-9]+)-[a-zA-Z0-9-]+\.html$ /achat/article_details.php?id=$1 [L]
(la page indiquée n'existe pas)

Mais j'aurai forcement une catégorie avec plusieurs mot... par exemple : "nom-de-ma-categorie-1-c-est-le-nom-de-l-article.html"

mais je viens des tests en rajoutant un chiffre au milieu du nom de la catégorie, cela fonctionne bien
ex : nom-2-de-ma-categorie-1-c-est-le-nom-de-l-article.html
J'ai bien l'article 1 et non le 2 qui s'affiche.....
merci encore
 
WRInaute passionné
ca marche avec ton exemple car il n'y a pas de numérique dans le nom de l'article mais ca ne marcheras pas avec : nom-2-de-ma-categorie-1-c-est-le-nom-de-3-l-article.html
il faudrai supprimer un "0-9" quelque part.
 
Nouveau WRInaute
bah, t'as raison, ça marche pas si le numéro se trouve dans c-est-le-nom-de-l-article :?
mais pourtant si je suis ton exemple, il n'y a pas de parenthèses dans [a-zA-Z0-9-]+
l'id se trouve bien là : ([0-9]+) - qu'est ce qui fait que cela merdouille ?
Comme je suis le gars pénible, je peux avoir des chiffres dans la catégorie et le nom de l'article.
Comment faire ?
thanx
 
WRInaute passionné
mets toi à la place d'apache et essaye de découper l'url nom-2-de-ma-categorie-1-c-est-le-nom-de-3-l-article.html
l'id peut-être l'un des 3 numéros. Les parenthèses n'ont aucune influence sur la découpe de l'url.
Il n'y a pas pas 36 solutions : il faut interdire soit les numéros soit le tiret dans la catégorie ou dans le nom de l'article. Une autre solution serait de changer de séparateur et de l'interdire dans la catégorie ou le nom de l'article. Tu peux par exemple remplacer le tiret devant l'id par un slash.
 
WRInaute accro
Attention à certains séparateurs, du genre la virgule, car de gros sites, comme Facebook ne les gèrent pas du tout et te tronque ainsi tes url
 
Discussions similaires
Haut