URL Rewriting : transformer une page en faux repertoire ?

WRInaute occasionnel
salut,

Alors voilà mon problème :

J'utilise une règle de ce genre :

RewriteRule ^([a-z0-9_-]+)/([a-z0-9_-]+)/([a-z0-9_-]+)\.html$ /index.php?rubrique=$1&module=$2&page=$3

Pour rewriter des adresses du genre :

-www.site.com/index.php?rubrique=rub&module=mod&page=pag

en : -www.site.com/rub/mod/pag.html .

Jusque là, aucun soucis.

Le problème arrive lorsque une page à besoin de variables supplementaires passée par URL, pour ca j'ai donc fait la règle suivante :

RewriteRule ^([a-z0-9_-]+)/([a-z0-9_-]+)/([a-z0-9_-]+)/([a-z0-9_-]+)\.html$ /index.php?rubrique=$1&module=$2&page=$3&var1=$4

Afin d'essayer de rewritier des adresse du genre :

-www.site.com/index.php?rubrique=rub&module=mod&page=pag&var1=var

en :

-www.site.com/rub/mod/pag/var1.html.

le hic est que la page : /rub/mod/pag.php existe physiquement sur le repertoire. du coup si je tappe -www.site.com/rub/mod/pag/var1.html, il me charge pag.php sans chercher plus loin, et ma règle n'est pas active :( ... Et biensur, pour que ca fonctionne, ca doit passer par l'index.php qui s'occupe de charger ce qu'il faut ...

Vous auriez une idée à mon problème ? Merci d'avance !
 
WRInaute passionné
Je n'ai pas tout compris à ton hic, mais essaye d'inverser les deux règles, la première étant plus "générale" que la seconde, il est normal que celle ci soit traitée en priorité.

Je ne sais pas si cela va t'avancer mais je tente quand même. ;)
 
WRInaute occasionnel
Le problème est que sur n'importe quel site à priori, si on a une image du genre :

-www.site.com/page.php

alors

-www.site.com/page/zoiejzijf marchera tout aussi bien (sans url rewriting) ...

Moi je veux rewriter des pages du genre
-www.site.com/index.php?rubrique=rub&module=mod&page=pag&var1=var

en :

-www.site.com/rub/mod/pag/var1.html

le hic est que -www.site.com/rub/mod/pag.php existe physiquement sur le serveur, donc il va me charger cette page sans chercher le rewriting :(
 
WRInaute passionné
Ok.

Donc si je suis le schmilblik, et si tu supprime ta première règle, le rewrite devrait bien se passer non ?

Deuxièmement, as tu rajouté le flag [NC, L] en fin de ligne ? (NC = Non sensitive case, et L = LAST (on sort des règles de traduction))
 
WRInaute occasionnel
"Donc si je suis le schmilblik, et si tu supprime ta première règle, le rewrite devrait bien se passer non ? "

+> non la première règle c'etait juste pour montrer le fonctionnement, de ce coté pas de soucis (avec ou sans c'est le meme soucis).

"Deuxièmement, as tu rajouté le flag [NC, L] en fin de ligne ? (NC = Non sensitive case, et L = LAST (on sort des règles de traduction))"

+> non je vais essayer avec :)

Je sais pas comment mieux exposer mon soucis...

Sur n'importe quel site, par exemple si tu as www.site.com/page.php , et bien tu peux tapper www.site.com/page/azerty

ca chargera quand meme page.php (sans s'occuper d'url rewriting ni rien !) c'est ca mon soucis !

car je souhaite rewriter www.example.com/index.php?rubrique=rub& ... g&var1=var en www.example.com/rub/mod/pag/var1.html

Mais quand on tape l'adresse précédente, l'url rewriting est inactif, il me charge le pag.php (qui existe physiquement dans /rub/mod/pag.php).

en gros, pour une page, quand tu tappe /page.php , /page, /page/ ou meme /page/nimportequoi le navigateur fait pas la différence ...

Il faudrais que je rewrite par exemple comme ca :

http://www.example.tld/rub/mod/pag_var1.html

pour pas qu'il y a des confusion possible avec la page physique sur le serveur, mais ca m'embête un peu :(
 
WRInaute passionné
Sur n'importe quel site, par exemple si tu as www.site.com/page.php , et bien tu peux tapper www.site.com/page/azerty

ca chargera quand meme page.php (sans s'occuper d'url rewriting ni rien !) c'est ca mon soucis !

Ca c'est un gros souci effectivement... Mais étant données tes règles proposées, je ne vois pas pourquoi tu aurais ce genre de rewriting (puisque tu rewrite uniquement des fichiers html)... :/

Qu'as tu d'autre dans ton fichier .htaccess ?
 
Discussions similaires
Haut