Page 1 sur 1

Réécriture d'URL : se débarasser des paramètres encombrants

Posté : 23 mai 2011, 23:24
par devboard
Hello,

Un exemple sera bien plus efficace qu'un long discours :

Ce que j'ai :
en URL non réécrite : http://127.0.0.1/monsite/index.php?modu ... &item_id=2;
en URL réécrite : http://127.0.0.1/monsite/content/catego ... passe.html

Ce que j'aimerais : http://127.0.0.1/monsite/microsoft-bill ... passe.html
Donc trouver un moyen de me passer de ce 'content/category/category-1-1-' pas beau.

Contexte :
Je passe pour le moment par une classe router à laquelle je fais appel à chaque fois que j'affiche un lien (router::_('index.php?...')) qui est de cette forme :

Code : Tout sélectionner

class content_router_category_category extends router{ function __construct($url=null){ $this->rewriteUrl(); } public function rewriteUrl(){ //tableau des paramètres de l'url $parameters = $this->getParameters(); //va choper l'alias du lien à afficher $url = menu::getInstance($parameters['item_id']); $alias = $url->getUrlInfo()->alias; //génération de l'url réécrite $cleanUrl = request::getPathBaseSite().'content/category/category-'.$parameters['cat_id'].'-'.$parameters['item_id'].'-'.$alias.'.html'; $this->setCleanUrl($cleanUrl); } }
Du côté htaccess, j'ai écrit cette règle :
RewriteRule ^([a-z]+)/([a-z]+)/([a-z]+)-([0-9]+)-([0-9]+)\.html$ index.php?module=$1&type=$2&view=$3&cat_id=$4&item_id=$5 [L]

J'obtiens effectivement une URL réécrite, mais comme dit précédemment, avec des infos qui font tache (mais qui me semblent indispensables), d'où ma question,y a t il un subterfuge (apache, php ou autre) pour passer de ca:
http://127.0.0.1/monsite/content/catego ... passe.html
à ca :
http://127.0.0.1/monsite/microsoft-bill ... passe.html

d'avance merci

board.

Re: Réécriture d'URL : se débarasser des paramètres encombrants

Posté : 23 mai 2011, 23:35
par moogli
salut,

Le lien c'est que du texte que tu génère, après le reste c'est la règle de ré écriture qui fait tous le taff.

Seulement avec ce que tu veux tu ne pourras jamais retrouver l'article / contenu / truc par le titre sans prévoir un autre moyen de faire la liaison entre les deux. (champ de table contenant le titre passé dans l'url ou autre chose.).

Généralement on passe la clef primaire dans l'url pour aider à faire le tri.


@+

Re: Réécriture d'URL : se débarasser des paramètres encombrants

Posté : 24 mai 2011, 00:03
par devboard
Hello,

Mon url est renseignée dans une table contenant les champs suivants:
id = url id / item_id dans mon exemple (à la joomla)
name = pas utile (juste pour l'identifier dans le BO)
alias = utile (il doit figurer dans l'url)
url = pas utile (juste pour visionner l'url dans le BO)
params = pas utile
module = le nom "formaté" du module (nommodule/type_view)
exemple : content/category_category => module=content&type=category&view=category

L'item_id/id de la table url est la clée primaire et peut me permettre de trouver toutes les infos nécessaires, mais comment formater correctement l'url pour obtenir ce que je désire ?
Il me manque une étape, je crois.
index.php?item_id=3 => index.php?module=content&type=category&view=category&cat_id=1&item_id=2; => microsoft-bill-gates-se-surpasse.html

Ma règle de réécriture doit être erronée, mais comment peut elle savoir dans le cas où j'entre une url de la forme index.php?item_id=3 qu'elle devra instanciée les classes relatives au module content/category_category sans que ce ' content/category_category' soit présent explicitement dans l'url réécrite ?

Re: Réécriture d'URL : se débarasser des paramètres encombrants

Posté : 24 mai 2011, 01:05
par moogli
ça c'est dans le code php que tu peux le savoir, car tu arrive avec (m$ bilou.htlm) et au mieux ta régle va le modifier en fichier..php?truc=m$billou) et donc il faut gérer le reste a partir de la. c'est pour cela je pense que tes url comporte le module et l'id de ce qu'il y a afficher. tu peux réduire en notant cela comme un identifiant (par exemple idmodule-idarticle/titre-a-la-mode-rewrite.html) et toi derrière tu peux passer deux paramètres utilisable.


@+

Re: Réécriture d'URL : se débarasser des paramètres encombrants

Posté : 27 mai 2011, 23:54
par devboard
Hello,

Je me suis enfin débarrassé de mes paramètres en trop en passant par une table de correspondance ( ancienne url / nouvelle url / paramètres de redirection ) et en modifiant le tableau GET à la volée pour lui définir mes propres paramètres, ainsi mes modules peuvent se charger correctement sans tenir compte de l'url "affichée dans la barre de navigation" mais bien de celle que je lui soumets après vérification en interne.

Niveau htaccess, la règle est maintenant beaucoup plus simple:
RewriteRule ^([/a-z-0-9-]+)$ index.php?txt_1=$1 [L]

Le seul hic, et pas le moindre, est qu'une url doit avoir sa correspondance dans la base sinon c'est la 404 (du moins, en l'état). Je m'en accommoderais et qui plus est, cela simplifie la gestion des 404.

Merci pour tes conseils moogli.

See you !