1
<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)。当我删除两个重写语句时,它起作用了。

不知道为什么,但日志文件夹中没有显示错误。没有任何错误日志。

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

4

1 回答 1

2

您的表达式 ,(.*)匹配目标 , /public/something。重写引擎循环,直到请求 URI 停止更改,并且您的请求 URI 变成/public/public/public/public/publicetc,因为没有什么可以停止重写过程。尝试添加条件以防止循环:

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

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

于 2013-01-13T11:59:12.677 回答