8791 sujets

Développement web côté serveur, CMS

Bonjour à tous

Je débute dans la mise en place de réécriture d'url et je me demande une chose :

Comment faire pour placer un seul élément séparateur pour des urls du type suivante :

http://www.monsite.com/page.php?cat=1&sscat=1


transformation souhaité :

http://www.monsite.com/page-mots-clés-générés-1-1.html



Jusqu'à présent j'utilise 2 éléments séparateur.
Le tiret(-) pour les mots clés et l'underscore(_) pour les ids, ce qui donne :

http://www.monsite.com/page-mots-clés_1_1.html


Et la règle de réécriture :

RewriteRule ^page-([0-9a-z-]*)_([0-9]+)_([0-9]+)\.html$ page.php?cat=$2&sscat=$3 [L]


Avec ce code, je suis obligé d'utiliser un 2ème élément séparateur car je ne sais pas combien de tirets j'aurai dans mes mots clés >> ([0-9a-z-]*)

Et je ne vois pas comment faire autrement.
Pourtant, j'ai l'impression d'avoir déjà vu d'autres sites le faire.

Quelqu'un pour éclairer ma lanterne ?
Modifié par sharky (16 Apr 2009 - 15:40)
La réponse m'intéresse également.

Après quelques réflexion sur le sujet, je me suis demandé si la meilleur méthode ne consistait pas à mettre les mots clés (lorsqu'ils sont en nombre indéterminés) à la fin du nom.

Exemple :
http://www.monsite.com/1-1-1erMotCle-2emeMotCle-3emeMotCle.html


ou encore

http://www.monsite.com/[b]news[/b]-1-1-1erMotCle-2emeMotCle-3emeMotCle.html

Modifié par Javanight (15 Apr 2009 - 11:43)
Salut,

Javanight a écrit :
Après quelques réflexion sur le sujet, je me suis demandé si la meilleur méthode ne consistait pas à mettre les mots clés (lorsqu'ils sont en nombre indéterminés) à la fin du nom.
C'est justement ce que j'étais en train de répondre. Smiley smile
Eh bien pour développer un peu : si les mots-clés n'ont aucune utilité et que l'on ne souhaite récupérer que la catégorie et la sous-catégorie c'est effectivement beaucoup plus simple de les placer en premier car la regexp devient toute simple à faire. C'est d'ailleurs la solution utilisée dans la partie Apprendre (même s'il n'y a qu'un id dans ce cas) :

http://www.alsacreations.com/article/lire/628-balises-meta.html

http://www.alsacreations.com/article/lire/626-impact-rendu-indentation-code.html

http://www.alsacreations.com/astuce/lire/25-comment-rendre-valide-une-animation-flash.html
En effet, c'est tout bête mais il fallait y penser Smiley smile

Je pense que c'est une bonne méthode ...

Si quelqu'un de plus expérimenté pouvait approuvé Smiley smile
Modifié par sharky (15 Apr 2009 - 14:21)
Administrateur
Sinon il est possible de passer toute la chaîne au script PHP et de la parser en interne (avec une regexp par exemple).
sharky a écrit :
Si quelqu'un de plus expérimenté pouvait approuvé Smiley smile
Euh... comment on doit le prendre ça ? Smiley hum Smiley langue
a écrit :
Sinon il est possible de passer toute la chaîne au script PHP et de la parser en interne (avec une regexp par exemple).


Comprend pas bien.
Tu peux développer stp ?

Comment ca se passe au niveau de la règle de réécriture ?

En passant sur le blog d'emob, je me suis rendu compte que la structure fonctionnait avec un nombre illimitée de mots clé ...

http://www.emob.fr/dotclear/mac-is-back-babe-2277


a écrit :
Euh... comment on doit le prendre ça ?


Oops, j'ai fourché Smiley scotch
Modifié par dew (15 Apr 2009 - 16:44)
sharky a écrit :
Comprend pas bien.
Tu peux développer stp ?
Ben soit tu décomposes la chaîne via url rewriting, soit tu récupères une chaîne unique que tu parses dans le code PHP...
Houuuu laaaa ... Ca a l'air si simple pour vous Smiley smile
Mais je ne vous suis plus Smiley smile

Pour que ca soit clair pour tout le monde :
REQUEST_URI = /page.php
QUERY_STRING = cat=1&sscat=1

J'ai besoin d'un exemple schématisé si possible Smiley lol Smiley lol
Modifié par sharky (16 Apr 2009 - 00:43)
Salut,

dans ce cas ce serait plutôt :
REQUEST_URI = /page.php?cat=1&sscat=1


Sinon il y a plein de façons de faire mais pour te donner 2 exemples :

1) tu pourrais avoir :
RewriteRule ^page-(.*)\.html$ page.php?query=$1 [L]
Du coup tu récupères la variable $_GET['query'] et soit tu utilises une regexp soit un simple
explode('-', $_GET['query']);
puisque tu veux que tout soit séparé par des tirets.


2) tu pourrais même avoir :
RewriteRule ^(.*)$ page.php [L]
Et utiliser directement
explode('-', basename($_SERVER['REQUEST_URI']));
Ha oui, je comprend mieux.
Et dans ce cas ci, les id's se retrouveraient dans les 2 dernières cellules de l'array explode ...

C'est bien cela ?
Ok, Je pense que je peux placer un [résolu] Smiley smile

Merci à tous pour vos réponses et votre temps et à une prochaine Smiley cligne