【问题标题】:Understanding .htaccess file了解 .htaccess 文件
【发布时间】:2016-08-26 09:20:07
【问题描述】:

我正在寻求帮助以了解特定 .htaccess 文件的工作原理。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

以下是我认为到目前为止我所理解的:

第 1 行:允许 Apache 根据某些规则更改 url?

第 2,3 行:关于不访问文件和目录的内容。但是我的浏览器在访问http://localhost/dev/can_i/yes_i_can.php 时没有问题,所以我认为我没有正确理解。

第 4 行:我知道 ^(.*)$ 是一个正则表达式,表示“以任何东西开头和结尾”,但这到底指的是什么?整个网址?然后它被 index.php 替换,并附加了表达式。那么我们为什么不得到像localhost/index.php?url=localhost/index.php/whatever_came_after 这样的东西呢? 最后 [L, QSA] 做了什么?我知道 QSA 的意思是“查询字符串追加”,但不确定它是如何工作的。

非常感谢任何帮助。

【问题讨论】:

    标签: php apache .htaccess


    【解决方案1】:

    启用 apache mod_rewrite

    RewriteEngine on
    

    这两行表示如果浏览器中指定名称的文件不存在,或者浏览器中的目录不存在则继续下面的重写规则

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    

    RewriteCond 的基本意思是“仅当这是真的时才执行下一个 RewriteRule”。 !-l 路径是请求不是链接的条件(!表示不是,-l 表示链接)

    RewriteRule 基本上意味着如果完成的请求匹配^(.+)$(匹配除服务器根目录之外的任何 URL),它将被重写为 index.php?url=$1,这意味着对 olle 的请求将被重写为 index .php?url=olle.

    QSA 表示如果有一个查询字符串与原始 URL 一起传递,它将附加到重写(olle?p=1 将被重写为index.php?url=olle&p=1

    L 表示如果规则匹配,则不再处理该规则以下的任何 RewriteRules。

    有关这方面的更完整信息,请点击上面的链接。重写支持可能有点难以掌握,但有很多关于 stackoverflow 的示例可供学习。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-11
      • 2011-08-21
      • 2016-01-08
      • 2019-08-30
      • 1970-01-01
      • 2012-09-24
      • 2011-04-06
      • 2019-10-06
      相关资源
      最近更新 更多