ThinkPHP5:多模板配置二级域名

现在很多项目都有PC端和移动端,PC和移动端都分别在不同模块,而“www”二级域名是直接访问PC端(index模块),如果想要访问移动端“www.域名.com/mobile”,这样域名就太长了,下面我教大家一个方法缩短域名。 准备 ThinkPHP支持完整域名、子域名和IP部署的路由和绑定功能,同时还可以起到简化URL的作用。 要启用域名部署路由功能,首先需要在config.php开启:
// 域名部署
'url_domain_deploy'      => true,
定义域名部署规则支持两种方式:动态注册和配置定义 动态注册 可以在应用的公共文件或者application\route.php动态注册域名部署规则,例如:
<?php
use think\Route;
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\route.php(路由配置文件)中定义域名部署规则,例如:
<?php
use think\Route;
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',
        ],
    ],
    // 下面是其它的路由规则定义
]