为什么我需要两个规则集?

时间:2011-12-25 21:23:35

标签: regex apache mod-rewrite

为Apache服务器提供mod_rewrite。 我不完全理解为什么在这个示例中我需要两个RewriteRules:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$ public/ [L]
    RewriteRule (.*) public/$1 [L]
</IfModule>

最初在此DIY MVC教程中找到,似乎^$(.*)的含义相同。为什么我需要两个[L] ast标志,因为第二个不应该开火,对吧? 我试图更深入地理解所有内部机制,而不是仅仅复制工作解决方案。

1 个答案:

答案 0 :(得分:1)

不,^$.*并不代表同一件事:第一个匹配空输入,第二个匹配任何内容 - 包括空输入。第二条规则应该足够了。

至于为什么[L]在这里,请考虑空请求,而不是[L]

  • 第一条规则会将请求转为public/;
  • 然后第二个会触发,然后将public/变成public/public/