Условные правила .htaccess для того же URL - PullRequest
1 голос
/ 18 августа 2010

Каков наилучший способ объединить следующие два правила в одно, чтобы пользователи могли посещать domain.com/schedule, а также domain.com/schedule/ndomday enj

Правило следует переслатьтот же контроллер, где я проверю параметр

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]

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

Если вам все равно, получите ли вы параметр 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 голосов
/ 18 августа 2010

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

...