这个重写规则是什么意思?
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
抱歉,即使我已经阅读了mod_rewrite语法说明,我还是不理解... :-/ 有人能解释一下这条规则的作用吗?
非常感谢。
这个重写规则是什么意思?
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
我将尝试简要解释一下,希望能让您理解。
首先:如果您从未使用过正则表达式,请先了解一下。
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 将运行它,然后停止阅读其他规则。您可以使用其他选项,用逗号隔开。
^$
捕获对 /
的请求并将其重定向到 app/webroot/
。 [L]
表示这是“最后”规则,这意味着如果此规则匹配请求,则 mod_rewrite 将停止处理。
(.*)
匹配任何内容,并将其重定向到 app/webroot/
,并附加“任何内容”部分。同样,[L]
表示在触发此规则后停止处理。
第一条规则将捕获对 http://www.yoursite.com/ 的请求,将它们发送到 http://www.yoursite.com/app/webroot/(然后您的 Web 服务器将提供索引文档,例如 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,这可能不是您想要的结果。