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 :

[Apache] url rewrite


Sujet :

Apache

  1. #21
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    J'y réfléchis, encore merci de tes réponses.

  2. #22
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    L'idée est de ne pas modifier les paramètres qui sont nécessaires, puisque tu en as besoin (c'est le principe d'avoir un paramètre : en avoir besoin tel quel).
    Ce que tu peux réécrire, en revanche, est la liste de mots clefs que tu ajoutes à ton URL. Là, pas de souci. Mais pas les paramètres.

  3. #23
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Merci de ta réponse

    Oui, j'ai bien compris, mais :

    touslescables.com/a.php?a=A7AL^300P&c=Voi

    Sachant que A7 est la catégorie câble RJ45 cat5 UTP, je peux profier de cet info pour choisir des mots-clés bien précis.

    touslescables.com/voir-vitrine/cable-RJ45-cat5-UTP-A7AL/droit-300P

    Autrement, le séparateur ^ est atomique au niveau du site (ce qui avant décrit le mode de recherche et il en a dix possibles), mais par contre facultatif pour les recherches par catégories qui sont celles que je veux voir indéxées, car le mode de recherche est alors toujours composé de 4 caractères.

    Ce qui veut dire que je garde ce séparateur pour le site, mais aussi que le rewriting peut effectuer la séparation, non ?

  4. #24
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    ...

    Ton paramètre "a" vaut "A7AL^300P". Si tu me dis que c'est une valeur atomique, cela signifie que je peux chercher dans ma BDD à partir de cette valeur exacte, sans la modifier. Or, tu me dis également que tu extrais "A7AL" de cette valeur car c'est la catégorie. Qu'en est-il du reste de la valeur ?
    Pourquoi ne pas avoir simplement un paramètre "cat" qui vaut "A7AL" et mettre le reste dans un autre paramètre ?
    En outre, pourquoi ne donnes-tu pas un identifiant numérique à tes catégories ? Ce serait largement plus efficace, plus sécurisé,... Plus informatique. Perso, il m'arrive souvent de mettre un identifiant automatique à une table alors qu'il y a déjà un champ "code" saisi à la main. Cela me permet d'éviter tout problème. En plus, un identifiant numérique est largement plus rapide à indexer par le SGBD.
    J'en reviens à "300P", qui est visiblement un paramètre différent. Une sous catégorie, peut-être ? En ce cas, pourquoi ne pas le mettre explicitement ?

    Les possibilités sont vastes.
    Tu peux le faire à peu près comme tu le veux. Garde simplement ceci à l'esprit : plus tes données seront atomiques (vraiment atomiques), plus ce sera facile à manipuler.
    Si tu as besoin de split(), d'explode(), de preg_split(), de substr() ou d'une fonction similaire lors de la récupération des paramètres, alors c'est très mal barré. Cela semble le cas ici (avec ton ^).

  5. #25
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Merci de ton intérêt.

    Effectivement, les paramètres sont traités par un explode ('^', $_GET['a'])

    A7AL décrit le mode de recherche
    300 le produit
    P indique qu'il n'existe qu'une seule version du produit.

    Ce n'est peut-être pas très informatique, mais ça marche très bien, l'ensemble de la recherche étant contenu dans une seule chaîne de caractères.

  6. #26
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Eh bien, AMHA, il est temps de changer ça ^^
    Explode ta chaîne en 3 paramètres nommés et distincts, ce sera bien mieux à divers niveaux :
    • plus clair à relire dans quelques mois
    • plus facile à manipuler par l'URLR
    script.php?mode=A7AL&product=300&unique=true

    Sans l'URLR, il faudrait soigner davantage les noms des paramètres. Là, puisque tu vas mettre un URLR, ça a peu d'intérêt (ces noms seront cachés de toute manière).
    Rappel : l'optimisation se fait vraiment à tous les niveaux. Par exemple, il est recommandé d'éviter de mettre un paramètre "id" dans l'URL car cela n'indique pas à quoi il est destiné.

    Enfin voilà, c'est une URL comme celle ci-dessus que je te recommande de construire. C'est ça que tu pourrais avoir à réécrire. C'est plus simple que la solution que tu as actuellement.

    [Edit] L'algo du PageRank utilise officiellement 200 paramètres, ce qui laisse raisonnablement supposer qu'il y en a bien plus.
    Il y a largement la place pour des petits détails comme ceux-ci.
    http://googlesystem.blogspot.com/200...o-improve.html

  7. #27
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Merci de ta réponse.

    Le changement que tu proposes n'est pas difficile.

    Tu as sûrement raison, j'y réfléchis, mais entre :

    $mode = $_GET['mode'];
    $product = $_GET'product'];

    et

    list ($mode, $product) = explode ('^', $_GET['a']);

    Je ne vois pas où est la différence...

    Si la deuxième solution pose vraiment un problème pour le rewriting, c'est bien sûr un élément à prendre en compte.

  8. #28
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Yup

    Il y a une différence !
    En effet, il n'y a aucun intérêt à recopier des variables globales en variables locales (à part peut-être pour simplifier les noms de variables).
    Par contre, il y a un intérêt à filtrer les infos, or c'est ce que tu ne fais pas !

    Il faut filtrer les données selon ce qu'elles sont sensées contenir ! Renseigne-toi sur l'injection SQL pour avoir une petite idée de ce que tu encours à utiliser une copie des valeurs utilisateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $mode = strtoupper(preg_replace('/[^a-z0-9]/i', '', $_GET['mode']));
    $product = intval($_GET'product']);
    Maintenant, essaie de faire ça en une ligne avec list() et explode()

  9. #29
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Merci de ton intérêt.

    J'ai déjà reconnu que tu as raison (!), mais ne me dis pas que l'ajout d'une ligne avec list et explode est un gros problème dans l'organisation du code ou pénalise la performance.
    Par ailleurs, la réduction du nombre de variables a aussi ses avantages, tes fonctions ont moins de variables et sont plus faciles à maintenir.
    Enfin, s'il faut passer de une à plusieurs variables, ce n'est pas bien compliqué, un simple rechercher-remplacer suffit.
    Je pinaille...

  10. #30
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    De mon point de vue, combiner des paramètres qui n'ont rien à voir dans une même variable est en effet un réel problème d'organisation du code.
    Les paramètres sont prévus pour contenir des données élémentaires et les moteurs de recherche s'attendent à trouver une signification à la fois dans le nom du paramètre et dans sa valeur (et que tout soit cohérent).

    Conclusion : si, utiliser explode() comme tu le fais me semble être un gros problème pour la structure de ton code. Que l'on m'arrête si je me trompe.

  11. #31
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Oui, tu as raison, il vaut mieux garder les données élémentaires, on est d'accord.

  12. #32
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour, j'ai bien avancé

    Pour tout un catalogue, j'ai des liens (relatifs) du genre.

    <a href="produit-00007.html">

    Dans le .htaccess, une simple règle

    RewriteRule ^produit-([0-9]+)\.html$ /index.php?tlc=$1 [L,nc,r=301]

    Voilà, tout simple, ça marche, je récupère bien :
    index.php?tlc=00007

    Maintenant, excusez le niveau de la question, mais une chose qui m'étonne.
    Dans l'URL du navigateur, c'est index.php?tlc=00007 qui s'affiche.

    Si je veux récupérer la page dans mes favoris, c'est index.php?tlc=00007 qui vient.

    Or, il me semble que l'intérêt du rewriting c'est de voir s'afficher des URL propres, non ?

    Comment je peux voir s'afficher produit-00007.html ?

    MERCI d'avance...

  13. #33
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bon, j'ai trouvé.

    Dans le drapeau, il faut enlever r=301
    Instruction qui justement demande à Appache d'afficher la nouvelle URL

    Excusez du dérangement...

    MERCI

  14. #34
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    J'aime les problèmes du genre de celui-ci ^^

    Au passage : n'as-tu pas mis un peu beaucoup de flags ? Es-tu certain d'avoir besoin de tous ces flags ?
    As-tu bien lu mon article, dans lequel je propose d'ajouter le nom du produit dans l'URL ? Si ton souci est de référencer le site, cela devrait t'intéresser.

  15. #35
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Merci de ta réponse.

    1) J'ai nettoyé le flag, il reste juste [L]

    2) J'ai BIEN LU ton article, et j'ai commencé par un test de l'url rewrite, maintenant que ça marche je me pose la question des mots-clés dans l'URL.

    Le site dont je m'occupe vend des câbles.

    À la place de :

    cat-A1.html

    Je pourrais mettre, de façon dynamque selon la catégorie :

    ethernet-UTP-A1.html

    ou (autre exemple)

    cable-VGA-G4.html

    Quand on arrive au niveau du produit, on peut encore ajouter des mots-clés, par exemple, s'il s'agit de câbles, ajouter les connecteurs :

    cable-SCSI-Centronic-DB50-E3-325.html

    ou, pour un produit sans fil

    wifi-bluetooth-adaptateur-usb2-H5-241.html

    La première idée qui me vient est de mettre 2 mots clés dynamiques pour la catégorie et deux mots clés dynamiques pour le produit, et l'expression régulière peut s'y retrouver avec les séparateurs, non ?

    L'ennui, en dehors du petit boulot, c'est qu'il faut figer des mots-clés et je n'aurais pas le temps de voir ce qu'ils valent, je prendrais ceux de la nomenclature actuelle.

    Par ailleurs, mes titres sont complets et dynamiques, idem pour <keywords>, idem pour <description> et les pages XHTML strict sont bourrées de mots-clés, alors est-ce qu'il faut encore en ajouter dans les URL...

    Qu'en penses-tu ?

  16. #36
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ah oui, ça, c'est bien un inconvénient de l'URLR : l'URL dépend des mots clés, qui sont eux-mêmes souvent déterminés à partir d'un nom qui est habituellement dynamique. Cela donne une URL qui change à chaque fois que le nom du produit change...

    C'est pour cela qu'il faut éviter de changer le nom du produit ^^

    De toute manière, il me semble absurde de changer souvent un nom de produit...
    Concernant les catégories, en changer trop souvent le nom dénoterait (je pense) une mauvaise organisation au départ.

    Tu as tout à fait compris : n'inclus dans l'URL que des mots qui ne changeront pas, sinon tu te retrouveras avec des pages en duplicate content.

    Recommandation : passe tous les mots en minuscules avant de les ajouter à l'URL. Tu peux utiliser la fonction clean_url_parameter() que j'ai mise dans les archives à télécharger.

    Je ne sais pas s'il est judicieux de mettre les mots clefs de la catégorie dans l'URL d'un produit. Je suis d'avis de ne pas le faire.
    Je pense qu'il est intéressant de trouver des mots clefs qui soient vraiment en relation avec la page : le nom du produit serait un bon choix. Lae nom de la catégorie se répèterait trop : Google pourrait éventuellement prendre ça pour du martelage de mots clefs et te pénaliser !

    Concernant l'identifiant à mettre dans l'URL, soit tu le mets au début soit à la fin de ton URL. J'ai tendance à préférer au début car c'est plus simple à gérer dans le .htaccess mais il faut voir l'impact de l'un et de l'autre (côté marketing).

    L'importance des balises <meta> a réellement perdu du poids depuis l'arrivée de Google. C'est à peine un paramètre indicatif pour le moteur de recherche, donc certainement pas un paramètre à prendre en compte.
    Par ailleurs, lorsque tu fais une recherche dans Google, si un mot clef est trouvé dans l'URL, alors tu peux remarquer qu'il est mis en gras : cela suggère que les mots clefs présents dans l'URL ont une grande importance (et la théorie tient debout, je pense).

  17. #37
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Merci de ta réponse.

    Effectivement, cela paraît le plus logique :

    nom de la catégorie dans les liens du menu par catégorie

    nom du produit débarassé des articles et codages html dans les listes de produits. Avec des '-' pour séparation.

    Avec ta fonction clean_url_parameter() ou équivalent.

    Mais les titres sont parfois complexes, par exemple

    Câble de rechange pour moniteur VGA/SVGA, HDDB15 / HDDB15, série pro

    Il faut réduire à :
    cable-rechange-moniteur-VGA-SVGA-HDDB15

    Et l'URL serait du genre

    A4AL-300-cable-rechange-moniteur-VGA-SVGA-HDDB15.html

    Ou mieux, comme tu le fais remarquer, l'identifiant à la fin :

    cable-rechange-moniteur-VGA-SVGA-HDDB15-A4AL-300.html

    Je connais très mal les expressions régulières, mais peux-tu leur demander de lire à l'envers, ce qui permettrait d'avoir un nombre variable de séparateurs dans l'URL sans ajouter une marque début d'identifiant ?

    Cela duplique avec la balise <title> de la page, mais pas trop grave, non ?

    Par ailleurs, <description> donne le nombre de versions disponibles (longueurs, couleurs) et la fourchette de prix.

    Pour une idée plus concrète des titres, voir
    http://www.pharmimmo.com/mieux/index.php

    C'est le miroir de test ou d'ailleurs le début de rewriting est installé.

    Encore merci.

  18. #38
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Citation Envoyé par boteha
    Ou mieux, comme tu le fais remarquer, l'identifiant à la fin
    M'as-tu bien lu ?
    Citation Envoyé par Yogui
    Concernant l'identifiant à mettre dans l'URL, soit tu le mets au début soit à la fin de ton URL. J'ai tendance à préférer au début
    La différence se situe au niveau de l'expression régulière (dans le fichier .htaccess) dont les deux versions ressembleraient à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /([0-9a-Z]+)-([0-9]+).*/i
    /[0-9a-z-]+([0-9a-Z]+)-([0-9]+)\.[a-z]+/i
    Comme tu peux le voir, la 2° est plus complexe. C'est celle qui dispose les identifiants à la fin de l'URL. Plus complexe, ici, signifie moins souple donc à éviter.
    Enfin, à toi de voir hein. Si tu trouves que, d'un point de vue marketing, il est plus intéressant d'avoir les identifiants à la fin, à toi de trouver la meilleure manière pour le mettr en place.

  19. #39
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Merci de ta réponse,

    Oui, j'ai bien lu, mais je trouve quand même plus sympa d'avoir l'identifiant à la fin.

    En fait, je n'ai que 3 grands cas à gérer :

    1) Plan du site :
    cable-rj45-cat5-UTP-00250.html
    nom du produit + nombre à 5 chiffres + .html

    cat5-UTP-A6.html

    nom de la catégorie + 1 LETTRE MAJ + 1 CHIFFRE de 1 à 9 + .html

    cable-rj45-cat5-UTP-A6AL-250.html

    nom du produit + 1 LETTRE MAJ + 1 CHIFFRE de 1 à 9 + A + Soit L, soit M, soit un chiffre de 2 à 4

    Et, en admettant que les les lettres des noms de produits ou de catégories sont TOUJOURS en minuscules, cela devient assez facile à gérer.

    Je n'y connais pas grand chose aux expressions régulières, mais il me semble que cela pourrait ressembler à ça :

    *-([0-9]{5})\.html$

    *-([A-Z][1-9])\.html$

    *-([A-Z][1-9]A[LM234)-([0-9]+)\.html$

    Pas de risque d'embrouille, et ce n'est ça qui va ralentir le serveur, non ?

    Merci de ton avis et de simplications éventuelles.

  20. #40
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Cela devrait pouvoir fonctionner, en effet, à un crochet près :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     *-([A-Z][1-9]A[LM234])-([0-9]+)\.html$
    Cela dit, je me demande encore pourquoi tu construis un paramètre complexe (lettre + chiffe + "A" + [LM234])...
    Question de choix, j'imagine.

    Le seul hypothétique problème est pour un produit dont le nom se terminerait par "[A-Z][1-9]A[LM234]" (si tu mets le nom de produit en minuscules, pas de souci en vue).

Discussions similaires

  1. [Apache] URL rewriting
    Par Mister Nono dans le forum Apache
    Réponses: 5
    Dernier message: 22/06/2006, 11h32
  2. [Apache] URL rewriting (bidouille)
    Par goldorax113 dans le forum Apache
    Réponses: 5
    Dernier message: 11/05/2006, 21h44
  3. [Apache] URL Rewriting et sous domaines
    Par goldorax113 dans le forum Apache
    Réponses: 6
    Dernier message: 10/05/2006, 09h50
  4. [Apache] URL REWRITING par le .htaccess
    Par d.w.d dans le forum Apache
    Réponses: 1
    Dernier message: 19/04/2006, 20h50
  5. [Apache] - URL Rewriting et consommation CPU
    Par Acti dans le forum Apache
    Réponses: 3
    Dernier message: 23/08/2005, 09h53

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