【问题标题】:RewriteRule (mod_rewrite)重写规则 (mod_rewrite)
【发布时间】:2010-12-25 12:26:39
【问题描述】:

重写规则是什么意思?

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

对不起,即使在阅读了 mod_rewrite 语法解释之后,我也没有明白... :-/ 谁能解释一下这条规则的作用。

非常感谢。

【问题讨论】:

    标签: regex mod-rewrite rewrite


    【解决方案1】:

    我将尝试给出一个简短的解释,希望能为您解决这个问题。

    首先:如果你从未使用过正则表达式,那就去查一下吧。

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

    【讨论】:

    • 如果我说的有什么特别让你感到困惑的地方,请告诉我,我会尽力解决。
    • 非常感谢您的解释。阅读您的解释后,第二条规则( RewriteRule (.*) app/webroot/$1 [L] )现在对我来说完全有意义。但是第一条规则是做什么的呢? (...尤其是第一条规则中的“^$”对我来说似乎很奇怪)。再次感谢
    • 赛斯解释得很好。 ^ 在正则表达式中被定义为“字符串的开头”,而 $ 被定义为“字符串的结尾”。在这种情况下,您有 '^$' 计算结果为空字符串。因此,服务器将评估为 ./app/webroot/ 因为它不是在寻找文件。由于 Apache 处理这些“空”请求的方式,它可以返回我提到的任何内容。此外,它会附加“/”,因为 webroot 是一个目录。
    • @Jeff Rupert,希望我能加倍投票给你。写得非常好!欢迎使用 stackoverflow!
    • @zen:谢谢!最后决定停止拖钓并开始活跃起来。 =D
    【解决方案2】:

    ^$ 捕获到/ 的请求并将它们重定向到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,这可能不是您想要的。

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2011-02-23
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多