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] Gérer des ID en base de données


Sujet :

Apache

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut [URL rewriting] Gérer des ID en base de données
    Bonjour,

    J'ai besoin d'aide sur une réécriture d'url,

    je travail sur un site qui est sans doute difficile à réécrire, voici mon problème :

    Les urls ne sont pas gérées dynamiquement, elles sont inscrites dans une base de données. J'aimerais dans la mesure du possible rester dans cette configuration, cela me permettrait de ne pas tout reprendre.

    Voici des exemples d'url

    http://www.exemple.com/category1/blablabla/
    http://www.exemple.com/category1/blablabla/toto

    La partie en gras est la partie enregistrée dans la bdd.

    je dois retoucher la réécriture en ajoutant des id de page.
    http://www.exemple.com/category1/blablabla/1

    ou

    http://www.exemple.com/category1/blablabla/toto1

    Voici la règle en place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^category1/(.+)$  listecat.php?rew=$1 [L]
    Vous avez une idée ?

    Merci de votre aide.

    Jérémie
    La vie à le gout qu'on lui donne

  2. #2
    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 mims1664 Voir le message
    Vous avez une idée ?
    Euh... Une idée pour faire quoi ? Quel est le problème ?

    Y a un truc qui n'est pas clair : dans tes exemples tu mets "category1" mais ta règle parle de "category". Est-ce logique ?

    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

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    pardon j'édit c'est catégory1 !!

    vous avez une idée ? un conseil ?

    merci
    La vie à le gout qu'on lui donne

  4. #4
    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 non, on ne sait toujours pas quel est le problème ou le besoin !! "Une idée", certes, mais pour faire quoi ?

    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

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Bonsoir désolé de ne pas avoir été clair !

    Je n'arrive pas a mettre en oeuvre cette partie :

    Citation Envoyé par mims1664 Voir le message
    je dois retoucher la réécriture en ajoutant des id de page.
    http://www.exemple.com/category1/blablabla/1

    ou

    http://www.exemple.com/category1/blablabla/toto1

    Voici la règle en place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^category1/(.+)$  listecat.php?rew=$1 [L]
    A partir des données qui sont déja en place (url encodée dans la base de données)

    Je me demande si je devrais pas tout casser pour tout refaire ... mais j'ai peur des conséquences ! c'est pas forcement simple pour l'existant....

    Merci de votre aide.
    La vie à le gout qu'on lui donne

  6. #6
    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 mims1664 Voir le message
    Voici la règle en place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^category1/(.+)$  listecat.php?rew=$1 [L]
    C'est quoi le problème avec cette règle ? A vu de nez elle est correcte si tu as des URL en http://site.com/category1/123 avec 123 l'ID, si j'ai bien compris que rew est censé contenir l'ID. C'est bien ça ? Je suis désolé d'insister mais je trouve que tu donnes très peu de détails sur ce qui marche, ne marche pas, ce que tu veux faire (par exemple, quel est le sens de ce paramètre rew ?)

    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

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Bonjour,

    Voici la règle de base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^category1/(.+)$  listecat.php?rew=$1 [L]
    rew contient dans le cas ci dessous la chaine de caractère suivante : "category1/toto/"

    http://site.com/category1/toto/

    Pour le moment ca fonctionne, par contre je dois aller plus loin en passant d'autre paramètres par exemple :
    http://site.com/category1/toto/12

    ou

    http://site.com/category1/toto/tutu-12

    ou "tutu" est une variable supplémentaire, et "12" aussi est une variable supplémentaire.

    vu comme à été construit le rewriting au début ou l'on peut passer des chaines de caractères qui constitue des urls de type "category1/toto/titi/" ou "category1/" je ne vois pas comment je peux faire ... ??

    Merci
    La vie à le gout qu'on lui donne

  8. #8
    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
    On peut envisager un cas très simple. Je ne sais pas si tu connais les expressions régulières mais il est possible d'identifier les chiffres ([0-9]) et la fin des chaînes de caractères (c'est le $ que tu as déjà dans ta règle). Avec ça, on peut écrire la règle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^category1.*/([0-9]+)$  listecat.php?rew=$1 [L]
    qui fera en sorte que si une URL se termine par des chiffres, le paramètre rew contiendra ces chiffres : http://site.com/category1/toto/12 => rew=12.

    A l'identique, tu pourras construire une règle qui "capte" le pattern parametre-valeur.

    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

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Bonjour Mac !

    Excellent l'astuce ! merci ça fonctionne vraiment super bien !
    Merci !

    j'ai pu faire aussi d'autres tests en effectuant sur un échantillon un découpage des variables dans la base de données : au lieu d'enregistrée l'url je la créer dynamiquement ! je crois que je vais quand même m'orienter dans ce sens car c'est plus propre. Par contre dans mon cas je peux passer 1, 2, 3, 4, 5 variables.

    Je dois construire les règles pour chaque cas ?

    par exemple
    cas N° 1, une variable, suivie potentiellement d'un chiffre :

    URL :
    category/toto/
    category/toto/1

    REGLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^category1/(.+)/$  listecat.php?rew=$1 [L]
    RewriteRule ^category1/(.+)/([0-9]+)$  listecat.php?rew=$1 [L]
    Cas N°2 : Une sous categorie, (y'a une variante)

    URL :
    category/toto/titi (pas de /)
    category/toto/titi/2

    REGLE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^category1/(.+)/(.+)$  listecat.php?rew=$1&rew2=$2 [L]
    RewriteRule ^category1/(.+)/(.+)/([0-9]+)$  listecat.php?rew=$1&rew2=$2 &p=$3 [L]
    Dans cette regle losque j'ai l'url :
    category/toto/titi/2
    je rencontre le problème suivant : la variable $_GET[rew] contient "toto/titi", au lien de "toto" pour "$_GET[rew]" et "titi" pour "$_GET[rew2].

    Ensuite je descends dans le même principe de 2 niveau en construisant la réécriture de la même facon, ce qui donne pour le 4 eme niveau.


    URL :
    category/toto/titi/niveau3/niveau4 (pas de /)
    category/toto/titi/niveau3/niveau4/2

    REGLE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^category1/(.+)/(.+)/(.+)/(.+)$  listecat.php?rew=$1&rew2=$2&rew3=$3&rew4=$4 [L]
    RewriteRule ^category1/(.+)/(.+)/(.+)/(.+)/([0-9]+)$  listecat.php?rew=$1&rew2=$2&rew3=$3&rew4=$4&p=$3 [L]
    et idem ca ne fonctionne pas, les variables se concatènes dans la première.

    Vous avez une idée ?
    N'y a t il pas plus simple ?

    Merci pour tout !
    La vie à le gout qu'on lui donne

  10. #10
    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
    Dans ton cas particulier, tu n'as pas d'autre choix, je pense. Juste un truc : il faut un peu préciser le filtre car (.+) est trop générique et matche des URL category1/.../.../.

    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

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Bonsoir Mac !

    tu as raison c'est trop vague ! j'ai donc restreins la regle mais je n'arrive pas à récupérer la 3 eme valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RewriteRule ^category1/$  listecat.php [L]
    RewriteRule ^category1/([a-zA-Z0-9\-]+)/$  listecat.php?rew=$1 [L]
    RewriteRule ^category1/([a-zA-Z0-9\-]+)/([0-9]+)$  listecat.php?rew=$1&p=$2 [L]
    RewriteRule ^category1/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)  listecat.php?rew=$1&rew2=$2 [L]
    RewriteRule ^category1/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/$  listecat?rew=$1&rew2=$2 [L]
    RewriteRule ^category1/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/([0-9]+)$  listecat.php?rew=$1&rew2=$2&p=$3 [L]
    RewriteRule ^category1/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)$  listecat.php?rew=$1&rew2=$2&rew3=$3 [L]
    en effet la 3 eme variable peut etre $P ou $rew3
    dans tous les cas si je desactive l'une des deux dernieres je n'arrive pas à afficher la règle ...

    une idée ?

    Merci
    La vie à le gout qu'on lui donne

  12. #12
    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
    Non, pas d'idée : comment peut-on savoir dans quels cas c'est rew3 et dans quels cas c'est p ? A toi de nous dire.

    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

Discussions similaires

  1. URL rewriting et double écriture en base de données
    Par Estragon007 dans le forum Apache
    Réponses: 5
    Dernier message: 14/06/2013, 17h55
  2. Réponses: 8
    Dernier message: 14/02/2008, 18h04
  3. Réponses: 4
    Dernier message: 28/01/2008, 17h55
  4. Réponses: 6
    Dernier message: 19/12/2005, 13h41
  5. Comment gérer efficacement des listes en Base de données ?
    Par alexk dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 12/04/2005, 20h21

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