关于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。
以thinkphp为例,提供了名为 "s"的get参数,只需要将路径重定向到这个参数上即可,比如nginx下:
?
现在laravel和yii2的重写规则更加简单,仅仅需要:
?
?
当你访问一个无法访问的路径时,比如 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,然后我们可以根据这个url来解析pathinfo吧::
?
相关文章推荐
- iOS数组count操作(NSUInteger)的安全性
- mysql常用语句
- ios後臺播放音樂
- HDU 1075 What Are You Talking About (Trie)
- 模仿jquery框架源码 -生长---跨域访问
- MD5加密算法
- Java任意时间获得该时间所在周周一
- ElasticSearch如何应对故障
- 项目BUG总结
- Xcode升级后插件失败解决方法
- HDU-5150
- 利用jQuery对无序列表排序
- RGBA
- EXTJS 4.2 添加滚动条
- 有道词典
- c:"WINDOWS"Microsoft.NET"Framework"v2.0.50727"Temp
- 模仿jquery框架源码 -成熟---选择器
- Mongodb副本集配置
- C#序列化与反序列化(Serializable and Deserialize)
- python学习之--安装IDE(eclipse+pydev)