RewriteRule(mod_rewrite)

时间:2009-12-11 02:06:49

标签: regex mod-rewrite rewrite

重写规则是什么意思?

   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]

抱歉,即使在阅读了mod_rewrite语法解释后,我也没有得到它......: - / 有人可以解释一下这条规则是做什么的。

非常感谢。

2 个答案:

答案 0 :(得分:6)

我会尽量给出一个简短的解释,希望能为你解决这个问题。

首先:如果您从未使用过正则表达式,那么请查看它。

RewriteRule是三个不同的部分。第一个是用于搜索特定模式的请求字符串的表达式。第二个是从服务器实际提供的目标字符串。第三个是括号内的选项。

如果客户端以其中一个正则表达式的格式向服务器发出请求,则实际调用目标字符串并将其返回给用户,但用户不会看到此操作。正则表达式中位于一组括号内的任何内容都将保存,以便在目标字符串中使用。

因此,根据您的两条规则(假设您的网站为http://www.example.com/),会发生以下情况:

我输入http://www.example.com并且服务器返回索引页面或文件列表(或者之前由.htaccess文件确定的其他内容)。

我输入http://www.example.com/page2.html,服务器将返回app / webroot / page2.html。如果该文件不存在,那么我会得到一个404错误页面。

RewriteRules的两端都有[L]。这样做是告诉Apache这是遵循的最后一条规则。如果规则适合,Apache将运行它,然后停止阅读更多规则。您可以使用其他选项,以逗号分隔。

答案 1 :(得分:1)

^$抓取对/的请求,并将其重定向到app/webroot/[L]表示这是“最后”规则,这意味着如果此规则与请求匹配,mod_rewrite将停止处理。

(.*)匹配任何内容,并将其重定向到app/webroot/,并附加“任意”部分。同样,[L]表示在此规则触发后停止处理。

第一条规则会捕获http://www.yoursite.com/的请求,并将它们发送到http://www.yoursite.com/app/webroot/(您的网络服务器将提供索引文档,例如index.php以满足请求。

第二条规则会捕获任何其他请求,例如http; // www.yoursite.com ** / path / to / some / page.php **。粗体部分被“捕获”,mod_rewrite将请求发送到http://www.yoursite.com/app/webroot /path/to/some/page.php

用户只能看到http://www.yoursite.com/

另请注意,此表达式可能会导致问题。如果您输入http://www.yoursite.com/app/webroot/index.php,mod_rewrite会将请求更改为http://www.yoursite.com/app/webroot/app/webroot/index.php,这可能不是您想要的。