正在了解.htaccess文件


Understanding .htaccess file

我正在寻求帮助,以了解特定.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行:我知道^(.*)$是一个正则表达式,说"以任何东西开头和结尾",但它到底指的是什么?整个url?然后,它被index.php替换,并附加表达式。那么我们为什么不得到像localhost/index.php?url=localhost/index.php/whatever_came_after这样的东西呢?最后,[L,QSA]做什么?我知道QSA的意思是"查询字符串附加",但不确定它是如何工作的。

非常感谢您的帮助。

这将启用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表示如果规则匹配,则不再处理低于此规则的"重写规则"。

有关这方面的更多完整信息,请访问上面的链接。重写支持可能有点难以理解,但有很多关于stackoverflow的例子可以学习。