J'y réfléchis, encore merci de tes réponses.
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.
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
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 ?
...
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 ^).
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
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.
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 :script.php?mode=A7AL&product=300&unique=true
- plus clair à relire dans quelques mois
- plus facile à manipuler par l'URLR
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
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
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.
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.
Maintenant, essaie de faire ça en une ligne avec list() et explode()
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']);
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
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...
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.
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
Oui, tu as raison, il vaut mieux garder les données élémentaires, on est d'accord.
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...
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
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.
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
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 ?
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).
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
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.
M'as-tu bien lu ?Envoyé par boteha
La différence se situe au niveau de l'expression régulière (dans le fichier .htaccess) dont les deux versions ressembleraient à :Envoyé par Yogui
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.
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
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.
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
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.
Cela devrait pouvoir fonctionner, en effet, à un crochet près :
Cela dit, je me demande encore pourquoi tu construis un paramètre complexe (lettre + chiffe + "A" + [LM234])...
Code : Sélectionner tout - Visualiser dans une fenêtre à part *-([A-Z][1-9]A[LM234])-([0-9]+)\.html$
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).
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager