2010-08-18 2 views
1

Каков наилучший способ объединить следующие два правила в один, так что пользователи могут посетить domain.com/schedule, а также domain.com/schedule/{day}Условные правила .htaccess для той же URL

правило должно направить к тому же контроллеру, где будет проверить параметр

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] 

ответ

0

Может быть, вы не должны объединить его в один - попытаться переключить свои позиции, второй, как первый и первый после этого, так что ваши первое правило не будет запрашивать запрос, который должен быть проанализирован вторым правилом.

2

Если вы не заботитесь ли вы получить параметр day без значения, вы можете просто сделать это:

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

Это захватить эти изменения:

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

Если вы хотите, чтобы не получить пустой параметр day, сделайте следующее:

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

Наконец, если вы не ожидаете получить строку запроса из браузера по этим URL-адресам, я бы сбросил тег QSA, так как кто-то, отправляющийся в /schedule/monday?day=1, в конечном итоге установит day, равный 1, вместо «понедельника». Есть способы предотвратить это, но если вам не нужна строка запроса, проще просто игнорировать ее.

+0

Это отлично поработало, спасибо за это ;-) –