【发布时间】:2010-12-25 12:26:39
【问题描述】:
重写规则是什么意思?
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
对不起,即使在阅读了 mod_rewrite 语法解释之后,我也没有明白... :-/ 谁能解释一下这条规则的作用。
非常感谢。
【问题讨论】:
标签: regex mod-rewrite rewrite
重写规则是什么意思?
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
对不起,即使在阅读了 mod_rewrite 语法解释之后,我也没有明白... :-/ 谁能解释一下这条规则的作用。
非常感谢。
【问题讨论】:
标签: regex mod-rewrite rewrite
我将尝试给出一个简短的解释,希望能为您解决这个问题。
首先:如果你从未使用过正则表达式,那就去查一下吧。
一个 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/(然后您的网络服务器将提供索引文档,例如 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,这可能不是您想要的。
【讨论】: