这个mod_rewrite RewriteRule代码有什么问题?

时间:2013-01-13 05:38:21

标签: .htaccess mod-rewrite apache2

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

我在Windows 7上使用wamp apache。在httpd.conf中启用了mod_rewrite.so。此代码直接取自此处的教程:http://anantgarg.com/2009/03/13/write-your-own-php-mvc-framework-part-1/

它的目的是将调用重定向到实际逻辑所在的./public文件夹。

当我尝试浏览此.htaccess文件目录中的index.php时,我收到内部服务器错误(http 500)。当我删除两个rewriterule语句时,它可以工作。

不确定原因,但日志文件夹中没有显示错误。没有任何错误日志。

有关这里出了什么问题的任何线索?

1 个答案:

答案 0 :(得分:2)

您的表达式(.*)与目标/public/something匹配。重写引擎循环,直到请求URI停止变化,并且您的请求URI变为/public/public/public/public/public等,因为没有任何东西可以阻止重写过程。尝试添加条件以防止循环:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$   public/     [L]
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule (.*) public/$1   [L]
</IfModule>

因此,如果请求已经以/public开头,请不要应用该规则。