先看结论

最好还是不要用多应用模式,后期坑比较多。
官方文档的意思是在多应用中想要url地址中不出现应用名,可以通过域名绑定来实现,就是要绑定二级域名

文档位置:https://www.kancloud.cn/manual/thinkphp6_0/1297876

tp6从新安装一个空白项目理解多应用模式_刷新页面

准备

安装tp6和部署这里不表,我们一步步来搞清楚tp6多引用模式

本地域名 :www.duo.com
tp6从新安装一个空白项目理解多应用模式_php_02

1.安装多应用

composer require topthink/think-multi-app

创建默认应用index
tp6从新安装一个空白项目理解多应用模式_二级域名_03
刷新页面,发现报错了
tp6从新安装一个空白项目理解多应用模式_移动端_04

这个时候怎么查看具体报错信息?复制一份.example.env命名为.env
tp6从新安装一个空白项目理解多应用模式_php_05

再次刷新,可以看到详细的报错信息
tp6从新安装一个空白项目理解多应用模式_前后端分离_06

跟着提示我们创建控制器
这是命令行创建,单应用和多应用不太一样
文档:https://www.kancloud.cn/manual/thinkphp6_0/1037644

php think make:controller Index@Index --plain

然后写一个index方法
tp6从新安装一个空白项目理解多应用模式_移动端_07

刷新页面,可以看到index这个默认应用可以访问到了
tp6从新安装一个空白项目理解多应用模式_移动端_08

接着我们一口气直接创建一个网站后台应用

php think build admin

tp6从新安装一个空白项目理解多应用模式_刷新页面_09

这个时候访问,域名 添加一个admin 即可直接访问
tp6从新安装一个空白项目理解多应用模式_php_10

接着我们继续说,一般开发肯定是要使用强制路由,所去config/route.php下如下两项目改成true
tp6从新安装一个空白项目理解多应用模式_前后端分离_11

强制路由应该不难理解,完全匹配要是不知道含义的可以看文档解释
https://www.kancloud.cn/manual/thinkphp6_0/1037495

接着我们刷新页面,提示路由未定义
tp6从新安装一个空白项目理解多应用模式_二级域名_12

去admin应用下定义路由,直接把最外层的route目录复制一份到admin应用
tp6从新安装一个空白项目理解多应用模式_刷新页面_13

刷新页面,又正常显示了
tp6从新安装一个空白项目理解多应用模式_二级域名_14

按照同样的方法,也复制一份route目录到Index应用,即可正常访问
tp6从新安装一个空白项目理解多应用模式_前后端分离_15

拓展:平常在开发中可能不止是传统pc站的应用,可以能还有api和移动端的。
所以我们在创建应用的时候多半会出现以下几个模块

//分别是前台pc主站
php think build index
//后期可能会改版成前后端分离的
php think build indexapi
//传统后台管理
php think build admin
//后台的api接口
php think build adminapi

//传统的移动端应用(其实这个也是属于前台,如果这个移动端项目 是前后端分离的方式来做的话,那么直接用上面的indexapi接口就行,可以弄一个中间件,检测到是手机访问重定向到 m.xx.com 类似京东www.jd.com访问 如果是检测到手机访问 会自动跳转到 m.jd.com )
php think build mobile

接着我们继续讲,如何隐藏后台管理的入口地址?
比如 http://www.duo.com/admin 我不想让普通用户输入 admin 就直接进入后台的登录页面

我们可以这样做,通过应用映射 来隐藏入口地址,此时通过 /admin就不能访问了 ,上线后可以随意更改后台入口地址
tp6从新安装一个空白项目理解多应用模式_刷新页面_16
tp6从新安装一个空白项目理解多应用模式_二级域名_17
tp6从新安装一个空白项目理解多应用模式_php_18

接下来清理以下目录,我们把一些多余的目录删除
tp6从新安装一个空白项目理解多应用模式_前后端分离_19
现在看起来要清楚很多了
tp6从新安装一个空白项目理解多应用模式_移动端_20

接着我们继续来讲一个知识点,那就是api模块,现在几乎都是api前后端分离模式的
我们创建一个api应用
tp6从新安装一个空白项目理解多应用模式_二级域名_21

tp6从新安装一个空白项目理解多应用模式_移动端_22

tp6从新安装一个空白项目理解多应用模式_刷新页面_23

关于第一个api的版本控制问题(重点),有些时候有这样的场景,就是api第一个版本不能立马下线或者需要保留的时候,我们可以这样来进行升级

创建类

php think make:controller api@v1/User --plain
 php think make:controller api@v2/User --plain

tp6从新安装一个空白项目理解多应用模式_移动端_24

路由重新定义

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
use think\facade\Route;


Route::group('v1', function () {
    Route::get('user', 'v1.User/index');
});



Route::group('v2', function () {
    Route::get('user', 'v2.User/index');
});

前面那个v1. v2. 格式不理解的看文档
https://www.kancloud.cn/manual/thinkphp6_0/1037497

tp6从新安装一个空白项目理解多应用模式_php_25

访问,这样就完成了对api版本的控制。
tp6从新安装一个空白项目理解多应用模式_前后端分离_26
tp6从新安装一个空白项目理解多应用模式_前后端分离_27

接着我们来讲一下,api开发的第二个知识点,二级域名路由访问api
意思就是由原来的

http://www.duo.com/api/v2/user

改成如下格式来进行访问

http://api.duo.com/v2/user

这种常见的操作,我们该怎么实现呢?

首先,我们要把二级域名 api.duo.com解析到你的服务器的ip地址上,我这里本地测试就用phpstudy来模拟了
tp6从新安装一个空白项目理解多应用模式_刷新页面_28
记得添加伪静态
tp6从新安装一个空白项目理解多应用模式_php_29

解析好后,我们打开项目config/app.php如下配置即可
tp6从新安装一个空白项目理解多应用模式_移动端_30

访问测试,注意:这样配置后原来的路由地址访问依然有效。
tp6从新安装一个空白项目理解多应用模式_刷新页面_31
tp6从新安装一个空白项目理解多应用模式_前后端分离_32