mod-rewrite正在跳过第一个匹配规则

时间:2013-11-03 13:30:53

标签: apache mod-rewrite

我的.htaccess文件中有一个mod重写,带有几个重写条目:

RewriteRule ^/services/(\w+)$ controllers/$1.php [L]
RewriteRule ^.*$ index.html [L]

每当我转到http://blah.com/services/something时,它会将我重定向到blah.com的索引​​,而不是匹配第一条规则然后停止。

另外:如果我将最后一条规则更改为:

RewriteRule ^(\w+)$ index.html [L]

应用程序"工作,"只是在第一个/.

之后还有其他路径时

为什么会这样?

1 个答案:

答案 0 :(得分:0)

此规则(RewriteRule ^.*$ index.html [L])过于通用,在从htaccess文件调用时会重写索引页的所有内容。从services / something重定向到services / controller / something.php之后,再次调用root htaccess,第一个规则不适用(没有匹配),所以它转到匹配的第二个规则。

我可以想到三件可能有所帮助的事情:

1)您是否尝试过使用END标志?

RewriteRule ^/services/(\w+)$ controllers/$1.php [END]

2)在services/controller目录中放置一个htaccess,它将使你的根级别htaccess无效。例如。使用指令RewriteEngine off

3)使用RewriteCond指令列表,使您的重定向到索引规则更具体。