现在很多项目都有PC端和移动端,PC和移动端都分别在不同模块,而“www”二级域名是直接访问PC端(index模块),如果想要访问移动端“www.域名.com/mobile”,这样域名就太长了,下面我教大家一个方法缩短域名。
准备
ThinkPHP支持完整域名、子域名和IP部署的路由和绑定功能,同时还可以起到简化URL的作用。
要启用域名部署路由功能,首先需要在config.php开启:
// 域名部署 'url_domain_deploy' => true,
定义域名部署规则支持两种方式:动态注册和配置定义
动态注册
可以在应用的公共文件或者application oute.php动态注册域名部署规则,例如:
<?php
use thinkRoute; Route::domain('m','mobile');
这样访问“m.域名.com”就可以直接访问mobile模板
支持绑定的时候添加默认参数,例如:
// m子域名绑定到mobile模块 Route::domain('m','mobile?var=thinkphp');
除了绑定到模块之外,还隐式传入了一个$_GET['var'] = 'thinkphp'
变量。
支持直接绑定到控制器,例如:
// m子域名绑定到mobile模块的index控制器 Route::domain('m','mobile/index');
如果你的域名后缀比较特殊,例如是com.cn
或者net.cn
之类的域名,需要在config.php配置:
'url_domain_root'=>'thinkphp.com.cn'
配置定义方式
除了动态注册之外,还支持直接在application oute.php(路由配置文件)中定义域名部署规则,例如:
<?php use thinkRoute; Route::domain('mo','mo'); return [ //域名绑定到模块 '__domain__' => [ 'api' => 'api', 'm' => 'mobile', 'www' => 'index', ], ];
注意: 域名绑定到模块后,"www.域名.com"他会默认加上index模块,如果访问“www.域名.com/index”哪这个index不是模块而是控制器名称(因为默认加上index模块)
绑定路由规则
可以把域名绑定到一系列指定的路由规则,例如:
Route::domain('blog',[ // 动态注册域名的路由规则 ':id' => ['blog/read',['method'=>'GET'],['id'=>'d+']], ':name'=>'blog/read', ]);
如果使用配置文件配置的话,可以按照下面的方式:
return [ '__domain__'=>[ 'blog' => [ // 动态注册域名的路由规则 ':id' => ['blog/read',['method'=>'GET'],['id'=>'d+']], ':name'=>'blog/read', ], ], // 下面是其它的路由规则定义 ]