重写规则是什么意思?
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
抱歉,即使在阅读了 mod_rewrite 语法解释之后,我也没有明白... :-/ 有人可以解释一下该规则的作用。
非常感谢。
重写规则是什么意思?
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
抱歉,即使在阅读了 mod_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,这可能不是你想要的。