2010-08-18 4 views
1

Quelle est la meilleure méthode pour combiner les deux règles suivantes en un seul, de sorte que les utilisateurs peuvent visiter domain.com/schedule et aussi domain.com/schedule/{day}règles de .htaccess conditionnelles pour même URL

Le règle doit transmettre au même contrôleur, où je vérifie alors le paramètre

RewriteRule ^schedule/?$ index.php?_orn_shows_action=view-schedule [NC,QSA,L] 
RewriteRule ^schedule/([a-zA-Z0-9-]+)/?$ index.php?_orn_shows_action=view-schedule&day=$1 [NC,QSA,L] 

Répondre

0

Peut-être que vous ne devez pas le combiner à un - essayer de changer leurs positions, seconde en tant que premier et premier après cela, de sorte que votre La première règle n'attrape pas la requête qui devrait être analysée par la deuxième règle.

2

Si vous ne recevez pas attention si vous ou non le paramètre day sans valeur, vous pouvez simplement faire ceci:

RewriteRule ^schedule(/(([a-zA-Z0-9-]+)/?)?)?$ index.php?_orn_shows_action=view-schedule&day=$3 [NC,QSA,L] 

Cela permettrait de faire ces variations:

/schedule 
/schedule/ 
/schedule/day 
/schedule/day/ 

Si vous voulez vous assurer de ne pas obtenir un paramètre vide day, faites ceci:

RewriteCond $3  ="" [OR] 
RewriteCond &day=$3 ^(.*)$ 
RewriteRule ^schedule(/(([a-zA-Z0-9-]+)/?)?)?$ index.php?_orn_shows_action=view-schedule&day=$3 [NC,QSA,L] 

Enfin, si vous ne vous attendez pas à recevoir une chaîne de requête du navigateur sur ces URL, je laisserais tomber la balise QSA, car quelqu'un allant à /schedule/monday?day=1 finirait par définir day égal à 1, au lieu de "lundi". Il existe des moyens d'empêcher cela, mais si vous n'avez pas besoin de la chaîne de requête, il est plus facile de l'ignorer.

+0

Ça a bien fonctionné, merci pour ça ;-) –