2013-11-03 71 views
0

我有一个国防部重写我的.htaccess文件一对夫妇重写条目:国防部重写被跳过第一个匹配的规则

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

每当我去http://blah.com/services/something它重定向我blah.com的,而指数比匹配第一条规则然后停止。

也:如果我改变最后的规则是:

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

应用“的作品,”只是没有当有第一/后的其他路径。

这是怎么发生的?

+0

如果在.htaccess中,你应该不使用前导'/'。只匹配'^ services/...' –

+0

由于它在目录上下文中被解析,所以重写引擎不会接收到作为URI一部分的前导'/'。 –

+0

@MichaelBerkowski我拿出了领先/,它仍然重定向到索引 – Snowburnt

回答

0

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

我能想到的3样东西,可以帮助:

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

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

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

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

+0

1和2都为我工作。我试图让角HTML5路由工作,任何更具体似乎并没有工作。 – Snowburnt