You are here

1路径分析

admin 的头像
Submitted by admin on 星期三, 2015-07-22 09:43

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

当我们访问node/1这个路径的时候,会发生什么呢?首先我们看到的路径,通常是这样的形式:

http://www.example.com/node/1

此时,我们是启用了简洁URL的,如果没有启用的话,可以配置,网上有比较多的教程。不启用简洁URL的路径,则是这样的:

http://www.example.com/?q=node/1

是的,与前者相比,多了一个“?q=”。

这是我们看到的路径,也是Apache看到的路径。可能有人会问,难道Drupal看到的路径不是这个样子的?是的,Drupal看到的路径不是这个样子。那么可能还会有人继续问,Drupal看到的路径是什么?Drupal看到的路径是这个样子的:

http://www.example.com/index.php?q=node/1

别名模式下:

http://www.example.com/index.php?q=aboutus

 

我们在本地做一个实验,分别访问路径:

http://localhost/snt6/index.php?q=node/1

http://localhost/snt6/?q=node/1

http://localhost/snt6/node/1

http://localhost/snt6/aboutus

我们看到了什么?我们看到的内容是完全一样的。aboutusnode/1之间是别名关系,可以说是一一对应的关系,Drupal在数据库里面,有张表,用来存储这样的对应关系。当我们访问路径aboutus的时候,它自动的就找到了对应的内部路径node/1。这个我们比较好理解。对于很多人,他刚开始的时候,并不知道Drupal看到的路径是:

http://www.example.com/index.php?q=node/1

很多人可能有个误区,感觉我们看到的路径,就是Drupal看到的路径。这样理解是有问题的。

当我们使用

http://www.example.com/?q=node/1

访问页面时,Apache帮我们做了转换,它将这个路径转为了:

http://www.example.com/index.php?q=node/1

 

在简洁URL下,apache将路径http://www.example.com/node/1最终也会转为:

http://www.example.com/index.php?q=node/1

 

有人可能会问,你是怎么知道这个转换的?在Drupal的根目录下,有这样一个文件.htaccess。我们打开这个文件,里面有这行代码:

  # Pass all requests not referring directly to files in the filesystem to

  # index.php. Clean URLs are handled in drupal_environment_initialize().

  RewriteCond %{REQUEST_FILENAME} !-f

  RewriteCond %{REQUEST_FILENAME} !-d

  RewriteCond %{REQUEST_URI} !=/favicon.ico

  RewriteRule ^ index.php [L]

这段代码就是做这个转换的,这段代码里面的RewriteCond %{REQUEST_FILENAME} !-f是什么意思?这个我也不知道。我们只需要知道,这里做了一个路径转换。仅此而已。


Drupal版本: