2010-08-18 49 views
1

什么是以下两条规则结合成一体,使用户可以访问domain.com/schedule也domain.com/schedule/{day}有条件的.htaccess规则

的最好方法规则应该转发到相同的控制器,在那里我会再检查参数

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

这很好,谢谢你;-) – 2010-08-24 15:10:07