您的位置:首页 > 其它

关于PATHINFO的重写规则解析

2015-07-16 11:54 211 查看
最近比较流行的框架比如laravel,yii国内的thinkphp都提供了以重定url的方式来实现pathinfo的url风格。

以thinkphp为例,提供了名为 "s"的get参数,只需要将路径重定向到这个参数上即可,比如nginx下:

?
根本不用费大力气写一大堆代码实现所谓的PATH_INFO.

现在laravel和yii2的重写规则更加简单,仅仅需要:

?
apache类似的规则:

?
解释下规则:

当你访问一个无法访问的路径时,比如 localhost/Index/index 实际上在你的webroot目录是没有Index/index目录或Index/index.html文件的,这时候我们就需要让框架来处理请求,将/Index/index 这个路径交给框架,而框架唯一的入口就是localhost/index.php,所以我们只需要将该请求重写到这个url上就可以了。

当访问

localhost/index/index?a=1 

时,会重定向到:

localhost/index.php?a=1

那么/index/index这个字符串哪去了?答案应该在一个环境变量$_SERVER['REQUEST_URI']或者类似的变量,让我们通过Yii2里面的一个函数来研究一下具体流程:

?
这个方法应该是用获得重定向之前的url,也就是你浏览器地址栏中所显示的 /index/index?a=1 这个原始字符串。在nginx和apache中,默认的是$_SERVER['REQUEST_URI']而在iis中略有不同,比如$_SERVER['HTTP_X_REWRITE_URL']和$_SERVER['ORIG_PATH_INFO']。

好了,不管它处理过程,我们只要知道通过这个方法得到了原始url,然后我们可以根据这个url来解析pathinfo吧::

?
$path得到了什么?就是 /index/index ,然后再去根据路由得到控制器名index和方法名index。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: