URL rewriting et répertoire virtuel

Nouveau WRInaute
Salut tout le monde

Voila mon site tourne sous Xoops (un célèbre CMS pour ceux qui connaisse…) bref, j’ai un module (nsections) et j’aimerais le rewriter de façon à avoir le nom des sections dans l’url et sous forme de répertoire virtuel.

A la base le lien est de type :
h**p://www.site.com/modules/nsections/index.php?op=listarticles&secid=3

Ce que je préfèrerais :
h**p://www.site.com/nomdelasection/

Le nomdelasection est transmis par la variable $secname

Le problème c'est que secid indique à la requète quel section afficher, si on le supprime, plus rien indique quelle section afficher. J'ai essayé de combiner les deux secid et secname ce qui donne /3-Guide/ mais j'aimerais me passer du 3 Avez vous une idée à la règle que je doit mettre ?

J'ai déjà du mal à exprimer ce que je cherche (oui l'UR est encore assez flou pour moi) donc si il vous manque des infos, ou autre n'hésitez pas à me les demander :)

La réponse à ce topic me servira de modèle car je rencontre exactement le même problème pour mon forum.

Merci d'avance
 
WRInaute accro
bon.. peux tu s'il te plait nous mettre l'URL complete de départ (en entier donc) et nous donner la tete que tu aimerais que ca ait a l'arrivée..
 
Nouveau WRInaute
Bah à la base dans le script, la variable $secname n'est pas incluse dans l'URL, c'est moi qui l'utilise pour nomer mon répertoire virtuel.

Et à l'arriver cela doit donner ceci : h**p://www.site.com/nomdelasection/
$secname est le nom de la section.

Désolé si je m'exprime mal :/
 
WRInaute occasionnel
Toujours un peu nébuleux, j'en ai peur. Tu veux, dans tes pages HTML,
Code:
http://www.site.com/nomdelasection/
et, au niveau du traitement réel
Code:
http://www.site.com/modules/nsections/index.php?op=listarticles&secid=3
où secid est lié à nomdelasection par le biais d'une correspondance en base de données? C'est bien cà?
 
WRInaute occasionnel
Excellent, on progresse. Donc, quelque chose comme
Code:
RewriteRule ^(.*)/$ modules/nsections/index.php?op=listarticles&secname=$1
dans un .htaccess à la racine.
Si tu préfères en httpd.conf (plus rapide, plus sûr, plus souple mais pas forcément possible)
Code:
RewriteRule ^/(.*)/$ /modules/nsections/index.php?op=listarticles&secname=$1
Là, tu récupères secname dans ton script, tu fais un lookup dans la base pour obtenir le secid et le tour est joué

Si tu ne veux pas modifier les scripts et obtenir directement les secid, il y a les RewriteMap évoqués dans un autre fil https://www.webrankinfo.com/forum/t/coder-de-maniere-unique-chaque-enregistrement.7132/

Ca correspond à ce que tu veux ou il manque des bouts?
 
Nouveau WRInaute
nikoshr a dit:
Là, tu récupères secname dans ton script, tu fais un lookup dans la base pour obtenir le secid et le tour est joué

Qu'appelle tu un Lookup ?
Donc en fait, il faudrait que je modifi ma requete sql pour qu'elle ne s'occupe plus de secid mais de secname ? c'est bien cela ?

Sinon c'est .htaccess :/ hébergeur mutualisé oblige :(
 
WRInaute occasionnel
J'entends par lookup aller chercher le secid dans la base correspondant au secname. Pour être plus clair, en PHP, ca donnerait quelque chose comme
Code:
$query = "SELECT secid FROM la_table WHERE secname='$secname";
$result = mysql_query($query);
$data = mysql_fetch_row($result);
$secid=$data[0];
Ou effectivement avoir comme clé d'accès le secname dans les requêtes.

Pour les RewriteMap, c'est juste la déclaration de la directive qui doit se faire dans la conf, le reste peut être utilisé dans les .htaccess. A négocier avec ton hébergeur, éventuellement.
 
Discussions similaires
Haut