IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

[URL Rewriting] avec titres textuels


Sujet :

Apache

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 151
    Points : 116
    Points
    116
    Par défaut [URL Rewriting] avec titres textuels
    Bonjour à tous,

    Je me lance dans l'URL rewriting. J'ai testé la solution suivante qui fonctionne parfaitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([0-9]+).html$ /test/cms/index.php?id=$1 [L]
    L'adresse à réécrire donne ceci : 10.html.

    Je veux cependant avoir un titre plus parlant et je veux utiliser un titre qui est présent dans ma base de données. Je modifie donc le code pour avoir ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([0-9]+)-([a-z]*).html$ /test/cms/index.php?id=$1&titre=$2 [L]
    Mais ça ne fonctionne pas alors que la page réécrite contient bel et bien le titre. Quelqu'un voit-il où est le problème ?

    Merci d'avance

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Pourriez-vous être plus précis ? Quelle est votre URL d'origine ? Quel résultat obtenez-vous ?

  3. #3
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par dl_jarod Voir le message
    Mais ça ne fonctionne pas alors que la page réécrite contient bel et bien le titre. Quelqu'un voit-il où est le problème ?
    Ben pas moi : si la page réécrite contient bel et bien le titre, où est le pb O_o

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 151
    Points : 116
    Points
    116
    Par défaut
    Bonjour, et merci pour votre aide.

    Entretemps, j'ai avancé et réglé certains problèmes, mais il me reste 2 couacs à corriger. Je remplace dans ma page php les caractères qui je ne veux pas afficher dans l'URL et j'arrive à ceci :

    Voici mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([0-9]+)-([a-z]*).html$ /test/cms/index.php?id=$1&titre=$2 [L]
    Ce qui me donne si mon id est 15 et mon titre "J'aime le karaté" : 15-jaimelekarate.html

    Ce code fonctionne mais si je mets pour le deuxième paramètre (-[a-z]*) afin qu'il prenne également les tirets ça ne fonctionne pas. Pourtant je pense avoir vu ce code dans un tutoriel.

    Deuxièmement, je voudrais ne pas utiliser l'id mais j'ai tout de même besoin du paramètre dans mon adresse afin de le traiter dans la page PHP. On m'a conseillé de simplement bouger la première parenthèse mais dans ce cas le traitement de la page php bugge et je me retrouve avec le titre qui est passé à la place de l'id, ce qui me fait une erreur avec la base de donnée vu que c'est mon critère de recherche.

    Voilà j'espère avoir été clair et que ces explications vous permettront de m'aider.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 151
    Points : 116
    Points
    116
    Par défaut
    Et pour répondre à _Mac_, dans les tutoriels sur lesquels je me suis basé, l'adresse réécrite est l'adresse de la vraie page (qui passe les paramètres), tandis que l'adresse à réécrire est l'adresse que l'on crée. Maintenant je ne trouve pas ça très clair et c'est source de confusions (la preuve).

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 151
    Points : 116
    Points
    116
    Par défaut
    J'ai résolu le problème du tiret. Il fallait mettre ([-a-z]*) et pas (-[a-z]*).

    Reste le problème consistant à enlever ignorer le premier paramètre...

  7. #7
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    J'ai pas tout compris : tu veux retirer l'ID des URL, c'est-à-dire avoir jaimelekarate.html ou lieu de 15-jaimelekarate.html, c'est ça ? Dans ce cas, ce qui m'embête c'est que tu dis que tu as besoin de l'ID dans ta page PHP, donc je ne vois pas trop comment t'en séparer

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 151
    Points : 116
    Points
    116
    Par défaut
    Oui c'est bien ça, et c'est juste dans un soucis esthétique et de lisibilité de l'URL mais je commence tout doucement à me dire que ça risque de ne pas être possible. En fait je crois que je prenais le problème à l'envers et que je comprenais que ma page php passait les paramètres à l'url réécrite mais je me rends compte que c'est le contraire...

  9. #9
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    L'URL rewriting c'est pour changer des URL reçues par le serveur, pas l'inverse.

    Je ne sais pas à quoi te sert ton ID mais j'imagine que c'est la clé primaire des articles. La question tourne donc autour de ça : quelle clé primaire puis-je utiliser et mettre dans les URLs ? Alors de 2 choses l'une : soit tu peux utiliser le titre des articles comme clé primaire (mais dans ce cas tu ne peux pas avoir 2 articles qui portent le même titre) et dans ce cas, passer jaimelekarate suffit, soit ce n'est pas possible (par exemple parce que tu veux avoir la possibilité de créer 2 articles avec le même titre) et dans ce cas, il faut que tu trouves une autre clé primaire à ajouter dans l'URL en plus du titre.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 151
    Points : 116
    Points
    116
    Par défaut
    Merci pour ces éclaircissements. Je pense ne pas pouvoir utiliser le titre pour faire des recherches dans la base de données non pas parce qu'il ne peut y avoir de doublons (la nature même de l'élément auquel se rapporte le titre fait qu'il ne peut y en avoir) mais parce que je traite ce titre pour l'afficher dans l'url sans les accents, espaces, apostrophes,etc... Donc le titre passé en paramètre est retravaillé et ne correspond pas au titre présent dans la BD. Et faire le traitement inverse pour récupérer le titre d'origine me semble impossible (j'enlève les majuscules, comment les remettre ? je remplace les espaces et apostrophes par un tiret, comment savoir lequel des deux je dois remettre ? ...)

  11. #11
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Ben dans ta recherche en base de données, applique le même traitement que pour construire tes URL. Par exemple, le titre du document est "C'est un tire Hyper Géant, n'est-ce pas ?". Ce titre est stockée tel quel dans la base de données, disant dans la colonne TITRE de la table ARTICLE (note la subtilité des noms choisis). Dans ce cas, ton URL, tu vas la calculer en passant tout en minuscule, en remplaçant tous les caractères accentués par des caractères sans accent et en supprimant tous les caractères spéciaux. Ca donne ceci : cestuntirehypergeantnestcepas.html.

    Pour retrouver ce titre en base, tu appliques le même traitement aux titres de la colonne ARTICLE.TITRE et tu compares. A moment donné, tu vas forcément tomber sur la correspondance.

    Maintenant, si ça te semble pas mal comme principe, faut voir à optimiser, car faire ce traitement dans la clause WHERE de ta requête SQL, c'est pas terrible. Dans ce cas, ce que je te conseille de faire c'est d'ajouter une nouvelle colonne dans ta table ARTICLE pour stocker ce titre simplifié et construire un index dessus. Après, il te suffit de faire un WHERE tout simple dessus pour retrouver ton article. La question c'est de savoir quand cette colonne est renseignée. Tu peux le faire au moment de l'INSERT ou de l'UPDATE de l'article. Sinon, tu peux construire un trigger sur la colonne ARTICLE.TITRE sur les événements update et insert pour renseigner automatiquement la colonne, ce qui t'évitera de retoucher aux requêtes INSERT et UPDATE. Mais dans tous les cas, il faut que tu modifies ton WHERE.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 151
    Points : 116
    Points
    116
    Par défaut
    C'est pas bête du tout ce que tu dis là !

    Je pense que je vais faire ce traitement sur le titre à l'insert et à l'update et le stocker dans un nouveau champ genre "titreclean". De ce fait, je n'aurai même plus besoin de faire le traitement dans le site en lui-même vu que je pourrai reprendre directement ce titre retravaillé pour le mettre dans l'url...

    Merci pour cette solution qui me semble être la bonne ! Je teste ça et je reviens avec le résultat.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 151
    Points : 116
    Points
    116
    Par défaut
    Formidable ça fonctionne !

    Pour ceux qui qui voudraient savoir comment :

    Dans l'ajout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $titreclean = strtolower($_POST["txtTitre"]);
    				$remplacements = array(' ' => '-', '\'' => '-', 'é' => 'e', 'è' => 'e', 'à' => 'a', 'ù' => 'u', 'ê' => 'e', 'â' => 'a', 'ç' => 'c', 'û' => 'u', 'ô' => 'o', 'ë;' => 'e', 'î' => 'i', 'ï' => 'i', 'ü' => 'u');
    				$titreclean = strtr($titreclean, $remplacements);
    Le titre clean s'enregistre dans un champ dédié de la base de donnée.

    Dans l'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <li><a href="<?php echo $row["titreclean"] ; ?>.html"><?php echo $row["titre"] ; ?></a></li>
    J'obtiens le titre retravaillé par l'URL rewriting suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([-a-z]*).html$ /test/cms/index.php?titre=$1 [L]
    Encore un tout grand merci !

  14. #14
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Rajoute peut-être les caractères ",", ";", "?" etc. dans ton tableau $remplacements. A la limite, tu peux définir dans ce tableau les substitutions : "é" => "e", etc. et faire les suppressions avec une expression régulière du style preg_replace('/[;,:/!]/g', '', $titre)

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. URL Rewriting avec GET (et "+")
    Par supertino7 dans le forum Apache
    Réponses: 6
    Dernier message: 10/11/2008, 20h35
  2. url rewriting avec tomcat en standalone
    Par julien20vt dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 18/01/2008, 13h59
  3. URL Rewriting avec lettres
    Par Alexandrebox dans le forum Apache
    Réponses: 7
    Dernier message: 22/11/2007, 13h22
  4. Si vous avez des questions sur Apache, HTAccess, URL rewriting avec Apache, etc
    Par Marc Lussac dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 28/08/2007, 19h09
  5. [URLRewriting] URL Rewrite avec Language
    Par Prosis dans le forum Apache
    Réponses: 15
    Dernier message: 28/02/2007, 19h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo