comment ignorer le / final?

WRInaute occasionnel
Si, comme je le comprends, tes paramètres sont optionnels mais que, s'il n'y en a qu'un, c'est obligatoirement p1, pour 2, obligatoirement p1 et p2, etc, alors tu peux faire comme ça :
Code:
RewriteEngine on
RewriteRule ^(.+)/(.+)/(.+)/?$ index.php?p1=$1&p2=$2&p3=$3 [L]
RewriteRule ^(.+)/(.+)/?$ index.php?p1=$1&p2=$2 [L]
RewriteRule ^(.+)/?$ index.php?p1=$1 [L]
 
WRInaute occasionnel
Merci de vos 2 réponses. Malheuresement, pour vous deux reponses le / de la fin est obligatoire pour que cela marche.

Puis avant de traité quoi que ce soit ajouté un / si il n'y est pas?
 
WRInaute occasionnel
Je viens de faire quelques essais chez moi (apache2 sous ubuntu breezy badger 5.10) :
Avec ces règles exactes :
Code:
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?p1=$1&p2=$2&p3=$3 [L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?p1=$1&p2=$2 [L]
RewriteRule ^([^/]+)/?$ index.php?p1=$1 [L]

Chez moi j'ai remplacé [L] par [L,R] pour voir le résultat directement dans la barre d'adresses

ça fonctionne pour les cas suivants :
-http://www.example.com/page1
-http://www.example.com/page1/
qui donnent -http://www.example.com/index.php?p1=page1


-http://www.example.com/page1/page2
-http://www.example.com/page1/page2/
qui donnent -http://www.example.com/index.php?p1=page1&p2=page2

-http://www.example.com/page1/page2/page3
-http://www.example.com/page1/page2/page3/
qui donnent -http://www.example.com/index.php?p1=page1&p2=page2&p3=page3


(Jai modifié par rapport à mon premier post parce qu'on avait p1=page1/ dans certains cas (le / final restait)

Es-tu sûr que ça ne fonctionne pas chez toi, ça ?
 
WRInaute occasionnel
Quand je copie/colle ton htaccess, seul p1 recupere une valeur et c'est la valeur : 'index.php' !

si j'enleve le '?' a la fin de chaque regle,

RewriteRule ^([^/]+)/$ index.php?p1=$1 [L]

ca marche, mais probleme si je ne met pas le / a la fin de l'url,


cela ne marche pas...
 
WRInaute occasionnel
C'est pas normal que tu retrouves index.php dans p1, ça veut dire une de ces deux choses :
- les règles sont appliquées 2 fois de suite, une fois pour créer l'URL avec index.php, et l'autre où p1 prends la valeur index.php, ce qui est impossible à cause du [L]
- tu appelles toi-même une url du style index.php, et la règle prends ça pour un nom de répertoire et reformule index.php?p1=index.php

Si tu me confirmes que tu n'as rien d'autre dans ton .htaccess que ces règles, on va essayer comme ça :
Code:
RewriteRule ^index.php$ - [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?p1=$1&p2=$2&p3=$3 [L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?p1=$1&p2=$2 [L]
RewriteRule ^([^/]+)/?$ index.php?p1=$1 [L]
 
WRInaute occasionnel
Ce coup si ... ca marche complementement ! Merci mille fois de ta percévérance. Et parce qu'un PR 5 vos mieux que 100 mercis, je ferait un lien sur ton site en profil quand mon site sera reoprérationnel.


Merci bonne soirée :)
(Merci aussi correiaj)
 
WRInaute occasionnel
J'essaye d'aider dans cette rubrique autant que faire se peut, puisque je suis fan de Perl et que j'ai l'habitude d'utiliser les regexp, ça me fait donc plaisir de me triturer un peu la cervelle pour répondre.

C'est néanmoins la première fois qu'on me propose de me remercier de cette façon, merci beaucoup à toi, surtout que mon pauvre petit blog tarde à trouver son public, une petite montée de PR pourrait peut-être l'aider :)
 
Discussions similaires
Haut