3

重写规则是什么意思?

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

抱歉,即使在阅读了 mod_rewrite 语法解释之后,我也没有明白... :-/ 有人可以解释一下该规则的作用。

非常感谢。

4

2 回答 2

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 将运行它,然后停止阅读更多规则。您可以使用其他选项,以逗号分隔。

于 2009-12-11T02:18:03.973 回答
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,这可能不是你想要的。

于 2009-12-11T02:19:32.100 回答