相同URL的条件.htaccess规则

时间:2010-08-18 13:34:35

标签: .htaccess mod-rewrite

将以下两条规则合并为一条的最佳方法是什么,以便用户可以访问domain.com/schedule以及domain.com/schedule/ {day}

规则应该转发到同一个控制器,然后我将检查参数

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 个答案:

答案 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]

最后,如果您不希望从这些网址上的浏览器中获取查询字符串,我会删除QSA标记,因为有人会/schedule/monday?day=1设置{{1}等于1,而不是“星期一”。有办法防止这种情况,但是如果你不需要查询字符串,那么忽略它就更容易了。

答案 1 :(得分:0)

也许你不必把它组合成一个 - 尝试切换他们的位置,第二个作为第一个和第一个之后,所以你的第一个规则将不会捕获应由第二个规则分析的请求。