Comment apache peut retrouver les variables dans l'url ?

Discussion dans 'URL Rewriting et .htaccess' créé par Matizi, 3 Novembre 2009.

  1. Matizi
    Matizi Nouveau WRInaute
    Inscrit:
    25 Octobre 2009
    Messages:
    4
    J'aime reçus:
    0
    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.
     
  2. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    $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]
     
  3. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 417
    J'aime reçus:
    0
    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
     
  4. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    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]
     
  5. Matizi
    Matizi Nouveau WRInaute
    Inscrit:
    25 Octobre 2009
    Messages:
    4
    J'aime reçus:
    0
    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
     
  6. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    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.
     
  7. Matizi
    Matizi Nouveau WRInaute
    Inscrit:
    25 Octobre 2009
    Messages:
    4
    J'aime reçus:
    0
    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
     
  8. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    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.
     
  9. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 417
    J'aime reçus:
    0
    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
     
  10. Matizi
    Matizi Nouveau WRInaute
    Inscrit:
    25 Octobre 2009
    Messages:
    4
    J'aime reçus:
    0
    merci encore pour vos explications, c'est tout a fait clair. :D
     
Chargement...
Similar Threads - apache retrouver variables Forum Date
monitoring apache2 ? Développement d'un site Web ou d'une appli mobile 28 Octobre 2019
Incohérences stats de crawl et logs apache Crawl et indexation Google, sitemaps 25 Juillet 2019
Renewal letsencrypt plante Apache Administration d'un site Web 12 Avril 2019
Coupure intempestive apache Développement d'un site Web ou d'une appli mobile 14 Mars 2019
Apache et QUIC (http/3) Administration d'un site Web 14 Novembre 2018
Tracer le fonctionnement d'Apache (2.2.15) Administration d'un site Web 23 Avril 2018
Tuto http->https pour apache Administration d'un site Web 9 Mars 2018
Redirection de page avec virtualhost d'apache Développement d'un site Web ou d'une appli mobile 6 Février 2017
Charset apache / php ? Administration d'un site Web 6 Juin 2016
Apache => Ngnix - Réécriture RewriteCond URL Rewriting et .htaccess 1 Février 2016