3

我刚开始学习如何编写 htaccess 。我从此页面获得了以下代码,它将所有内容重定向到 index.php 文件

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

我理解除了^$ public/ [L]和之外的所有行(.*) public/ [L]。它们是什么意思。对我来说,它看起来像是一些常规的 epression :).. 我知道 RewriteRule 用于编写重定向规则。但是符号 $ ,(,),., * 等是什么意思?表明 ?。
当我将这些行放入 .htaccess 时,出现以下错误

在此处输入图像描述

但是当我评论第 4 行时,它正在工作..即。以下代码正在工作

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

那么这里的问题是什么?

4

2 回答 2

1

这是您第一个问题的答案,对于第二个问题,您应该向我们提供更多信息(例如来自 的日志条目/var/log/apache2/error.log

^匹配字符串的开头

$匹配字符串的结尾

^$匹配一个空字符串

.匹配任何字符

*允许 0 到任意数量的前一场比赛出现

()标记一个以后可以引用的组

(.*)将匹配任意数量的字符

于 2012-11-20T18:54:17.657 回答
1

我认为您在重写循环中就像自爆:
您将 abc.com/anything 重写为 abc.com/public,并且您正在将 /public 重写为 /public。
也许您应该指定必须重写哪个 url。(限制你的请求)像这样:

RewriteEngine on
RewriteRule    ^$    public/    [NC,L]
RewriteRule    ^index.php(.*)$ public/$1    [NC,L]

将 index.php?requests 重写为 public/?requests

于 2012-11-20T18:54:49.767 回答