繁体   English   中英

RewriteRule(mod_rewrite)

[英]RewriteRule (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/ ,并附加“ anything”部分。 同样, [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 ,这可能不是您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM