ThinkPHP的Router路由使用体会
前段时间,明晨网络 Mingchennet.com 对当前流行的php框架进行了测试分析,以便选出最适合当前项目的一款,最终看好ThinkPHP。“ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架”,其官方网站地址为http://www.thinkphp.cn .以下简称ThinkPHP为TP。
项目有个需求如下:1.a.com和2.a.com绑定在同一个虚拟主机上,现在要求访问 http://1.a.com和http://2.a.com显示的是不同的页面。明晨网络在项目配置文件中,使用正则来匹配相应的URL规则,并动态include相应的流程文件。
现在换到TP,TP中有个路由规则,不过好像不能对ServerName——也就是域名进行判断,同时其路由规则必须按照指定的格式编写,还要制定action,module的名称,感觉不太灵活。但是被TP其他功能的强大灵活吸引,实在舍不得丢开这个框架。
好在,TP有所谓的空模块和空操作,也就是说当前URI没有匹配的模块则转交空模块处理,没有匹配的操作则转交空操作处理。所以我们在项目的Lib\Action目录下,删除默认首页IndexAction.class.php,建立文件EmptyAction.class.php,其内容如下
- <?php
- class EmptyAction extends Action{
- public function _empty(){
- require(CONFIG_PATH.'app_config.php');
- $app_action;
- $app_module;
- $app_url=$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
- for($i=0;$i<count($app_urlrouter);$i++){
- if(@preg_match($app_urlrouter[$i]['reg'],$app_url)){
- $app_action=$app_urlrouter[$i]['action'];
- $app_module=$app_urlrouter[$i]['module'];
- break;
- }
- }
- R($app_action,$app_module);
- }
- }
- ?>
该段代码中加载了一个项目配置目录中的一个配置文件app_config.php,其内容如下
- <?php
- //应用的路由配置
- $app_urlrouter=array(
- //站点首页
- array(
- 'reg'=>'/^www\.[^\/]{1,}\/$/i',
- 'action'=>'www',
- 'module'=>'index',
- 'des'=>'系统首页',
- ),
- );
- ?>
系统接收请求后,加载app_config.php文件,这个文件指定了路由规则,上面代码的规则含义就是当请求的url以www.开头,并且没有多余路径,比如www.a.com,则转交www操作的index模块处理。当然了,我们还要为操作和模块编写相应的代码,在Lib\Action下面新建文件WwwAction.class.php,内容如下
- <?php
- class WwwAction extends Action{
- public function index(){
- echo 'www site';
- }
- }
- ?>
现在将www.a.com的a记录解析到127.0.0.1,在浏览器访问www.a.com将看到“www site”,但是直接访问127.0.0.1则没有输出。至此,我们可以随意在TP中构建自己的路由规则了。
如果你的虚拟主机是支持自定义.htaccess文件apache,或者是支持自定义404.php的IIS,都可以使用这种方法来构建URL。随意定义URL的主要好处大概就是,在支持多域名绑定而不支持子目录的虚拟主机绑定N个站点以及SEO优化。
文章源自:明晨网络,明晨网络原创,《ThinkPHP的Router路由使用体会》,http://www.mingchennet.com/tec/code/php/55.htm
- 上一篇:明晨网络谈建站程序
- 下一篇:动态?伪静态?还是静态