.htaccess : incompréhension

WRInaute discret
Bonjour à tous,

J'ai un petit problème avec un htaccess, à savoir que le résultat me déroute un peu.
Voilà ce que je veux :
SI Condition
Alors :
Règle 1
Règle 2
Règle 3...

Or, j'ai fais à peu près cela :
RewriteCond Condition
RewriteRule ^/page1.html$ index.php?var1=ok [QSA,L]
RewriteRule ^/page2.html$ index.php?var2=ok [QSA,L]
RewriteRule ^/(.*) index.php?var3=ok [QSA,L]

Seulement, au lieu de s'arrêter comme je le veux à la première règle fonctionnelle, il continu malgré tout après avoir réécrit une première fois l'url.
Du coup, si je tape page1.html, je tombe sur index.php?var3=ok&var1=ok.
Or, moi je voudrais dans ce cas avoir seulement index.php?var1=ok.

Comment faire ? J'ai des idées de pourquoi ca ne fonctionne pas, mais aucune idée de comment résoudre le problème.
 
WRInaute discret
Malheureusement non, je ne peux pas, il est nécessaire et je plante mon site si je le vire.
En fait j'ai justement l'impression que la condition s'applique sur tous les rewrite rule jusqu'à ce qu'une règle soit effective, là il trouve un [L] et il sort de la condition, mais il continu quand même à appliquer les règles suivantes.

Bref, je ne fais que supposer, il n'empêche que c'est assez handicapant !
 
WRInaute occasionnel
Normalement, le [L] devrait effectivement empécher les règles suivantes de s'appliquer. J'ai déjà vu ce comportement, je ne sais pas ce qui le déclenche.

Le mieux, pour contourner le problème, c'est de faire en sorte que la dernière règle ne s'applique que si l'on a pas déjà une url du type index.php... ainsi :

Code:
RewriteCond Condition
RewriteRule ^/page1.html$ index.php?var1=ok [QSA,L]
RewriteRule ^/page2.html$ index.php?var2=ok [QSA,L]
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^/(.*) index.php?var3=ok [QSA,L]
 
WRInaute discret
J'y ais pensé, le problème c'est que j'ai largement simplifié mon htaccess dans mon exemple... J'ai une vingtaine de règle et d'url, et à la fin seulement les 2 règles qui s'appliquent "une seconde fois"... Alors je pourrais mettre 20 conditions, mais j'aimerais une solution plus simple et logique... J'ai un peu l'impression de trop bidouiller sinon :)
 
WRInaute occasionnel
Ok, je comprends, mais comme je n'ai aucune idée de pourquoi ton [L] ne fonctionne pas, je ne peux que recommander une autre bidouille :
ajouter S=50 après chaque L (pour skipper les 50 prochaines règles)

Code:
RewriteRule ^/page1.html$ index.php?var1=ok [QSA,L,S=50]
RewriteRule ^/page2.html$ index.php?var2=ok [QSA,L,S=50] 
...
 
WRInaute discret
Bon, j'ai pu faire le test sans les RewriteCond, ca ne change rien. Quand au S=50, ca ne fonctionne pas, les règles qui suivent sont tout de même éxécutées... A n'y rien comprendre, je désespére :p

Pour info tout de même, je suis sur dédié, donc si modif il y a à faire niveau config de apache, aucun soucis.

EDIT: je viens de me rendre compte d'un truc super bizarre... Si je vire ma dernière règle, plus rien ne fonctionne. (erreur 500 : maximum of redirections... dans les logs apache)

A l'heure actuelle, elle est construite comme suit :
RewriteRule ^([a-zA-Z0-9].(.*))$ /$1 [QSA,L]

Allez savoir pourquoi si je ne la met pas, plus rien ne fonctionne...
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut