Mon premier URL rewriting

Nouveau WRInaute
Bonjour,

je viens d'effectuer mon premier url rewriting tout simple.

objet.php?id=1

devient

objet_1.html

maintenant j'aimerais aller plus loin et remplacer le numéro automatique par le titre de l'objet par exemple :

objet_crayon.html

Faut-il pour cela envoyer ce nom dans le liens ou est-ce qu'on peut créer une règle pour aller chercher dans la base le nom associé a ce numéro ?

Merci d'avance

edit : le but est d'avoir une url comme ceci par exemple :
http://forum.hardware.fr/hardwarefr/Min ... 2149-1.htm
 
Nouveau WRInaute
En nommant tes pages avec le format objet_nomObjet.html tu indiques que nomObjet est l'identifiant unique de ton objet.
Si tu as un seul objet crayon, stylo, pinceau, ta règle fonctionnera.

Mais un tel nommage est limité, il serait plus judicieux de créer une règle de rewriting te permettant d'avoir des pages au format objet-nomObjet_IdObjet.html.

Phil
 
Nouveau WRInaute
ok je vais faire comme tu dis, donc mon url normal serait

objet.php?nomobjet=crayon&id=1

et mon url rewrité serait

objet_crayon_1.html

par contre dans mes liens le fait que je marque n'importe quel nom ne changera rien, si je comprends bien ??

la page objet_crayon_1.html sera identique a objet_toto_1.html
 
Nouveau WRInaute
Oui la règle fonctionnera quelque soit le type de l'objet (crayon, toto) vu que c'est l'id qui identifie de façon unique ton objet.

A toi donc d'écrire dynamiquement ton url en mettant le bon type d'objet. Car c'est bien là le but du rewritting, identifier clairement le contenu de la page pour rendre plus pertinente son indexation ;)
 
Nouveau WRInaute
Merci,

il me reste un petit souci avec ma règle.

je l'ai écrite comme ceci

RewriteRule ^(.*)-(.*)_(.*).html$ $1.php?nomobjet=$2&id=$3 [L]

si je mets objet-crayon_1.html cela fonctionne

si je mets objet-crayon-gris_1.html cela ne fonctionne pas.

je ne suis pas encore assez familier avec les expressions régulières pour trouver l'erreur, quelqu'un pourrait-il m'aider à corriger ?

edit : pour finir je vais faire un url du genre www.monsite.com/objet/1/crayon
ça me paraît une bonne solution, qu'en pensez-vous ? :wink:
 
WRInaute discret
noisequik a dit:
si je mets objet-crayon-gris_1.html cela ne fonctionne pas.
Petite question :
dans ce cas, quelle est la valeur de la variable "nomobjet"(crayon, gris ou crayon-gris) ?
essaye également de visualiser la valeur prise par $1, au besoin en créant une nouvelle page avec de nouvelles vars
 
WRInaute discret
donc c'est bien le résultat attendu.
par contre si cela ne marche pas, c'est que $1 pourrait bien être objet-crayon, no ? :wink:
 
WRInaute occasionnel
une regexp est gourmande par défaut, ça veut dire que
Code:
RewriteRule ^(.*)-(.*)_(.*).html$ $1.php?nomobjet=$2&id=$3 [L]

la regexp va mettre tout ce qu'elle peut dans la 1ere variable, tant que la règle est valide.
dans le cas de
objet-crayon-gris_1
ça donne
(objet-crayon)-(gris)-1 et donc ton objet a pour nom gris et il va appeller le script objet-crayon.php

plusieurs façon d'éviter ça :
mettre le nom du script en clair dans la règle
Code:
RewriteRule ^objet-(.*)_(.*).html$ objet.php?nomobjet=$1&id=$2 [L]

si plusieurs scripts, mettre la liste :
Code:
RewriteRule ^(objet|article|question)-(.*)_(.*).html$ $1.php?nomobjet=$2&id=$3 [L]
(marchera pour les scripts objet.php, article.php et question.php

Si aucun script ne contient de signe '-' dans son nom, la solution la plus simple serait de virer ce caractère de ceux autorisés dans la 1ere parenthèse :
Code:
RewriteRule ^([^-]+)-(.+)_(\d+)\.html$ $1.php?nomobjet=$2&id=$3 [L]
(là j'ai remplacé aussi .html par \.html, .* par .+, et la dernière variable par \d+, ce sont des choix personnel, pas la peine d'autoriser .* quand on sait qu'on aura toujours au moins un caractère par exemple, ni .* alors qu'on veut forcément des chiffres).

Avec les regexp, en règle générale, il vaut mieux essayer d'être le plus spécifique possible pour éviter les surprises comme ton crayon-gris.

Edit: j'avais oublié de modifier le numéro des variables $1, $2, $3 dans certaines règles...
 
Nouveau WRInaute
ok merci je vais étudier ces règles en détail...

Je pense pour le moment rester à mon shéma :

www.monsite.com/objet/1/crayon

quoique j'hésite aussi avec

ww.monsite.com/objet/crayon-1.htm


le .htm en fin est-il conseillé ? faut-il limiter le nombre de répertoires virtuels ??
 
WRInaute discret
Excellente et fort détaillée réponse de Chez Thierry :)
Personnellement pour htm je dirais que cela découle d'un choix personnel, mais peut-être vaudrait-il mieux prendre l'avis des experts en la matière.
Je ne crois pas qu'il y ait une limitation au nombre de dossiers virtuels, par contre plus leur nombre sera grand, plus les erreurs d'adressage interne seront faciles à générer.
dans ton ex, si on a : img src='crayon.gif'
je crois bien que le navigateur va aller chercher l'image là :
objet/1/crayon/crayon.gif
mais comme je n'ai encore jamais utilisé de dossiers virtuels, je suis pas sûr...
 
Nouveau WRInaute
cardoule a dit:
Je ne crois pas qu'il y ait une limitation au nombre de dossiers virtuels, par contre plus leur nombre sera grand, plus les erreurs d'adressage interne seront faciles à générer.
dans ton ex, si on a : img src='crayon.gif'
je crois bien que le navigateur va aller chercher l'image là :
objet/1/crayon/crayon.gif
mais comme je n'ai encore jamais utilisé de dossiers virtuels, je suis pas sûr...

Ce n'est heureusement pas un problème grace à l'utilisation de
<base href="http://www.monsite.com/" />

par exemple 8)
 
Discussions similaires
Haut