我的.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]
应用程序"工作,"只是在第一个/.
之后还有其他路径时为什么会这样?
答案 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指令列表,使您的重定向到索引规则更具体。