ThinkPHP6的多应用模式可以将不同功能模块拆分到独立的应用目录中,提升项目可维护性,但在宝塔面板部署时,默认配置下访问地址需要携带index.php,且多应用路由容易出现匹配异常的情况,需要针对性调整服务器配置和项目路由设置。

环境准备与项目上传
首先确保宝塔面板已经安装好PHP8.0及以上版本,并且安装好了对应的Composer工具,同时开启fileinfo、zip、curl等常用PHP扩展。然后将本地的ThinkPHP6多应用项目打包,通过宝塔的文件管理功能上传到网站根目录,解压后确认项目结构如下:
- app目录:包含多个应用子目录,比如admin、index、api等
- public目录:入口文件index.php所在目录
- config目录:项目配置文件目录
- route目录:路由配置文件目录
接着在宝塔的网站设置中,将网站的运行目录修改为public,这是ThinkPHP6的默认入口目录要求。
修改伪静态规则隐藏index.php
隐藏index.php的核心是让服务器将请求转发到public/index.php处理,不同Web服务器的伪静态规则不同,宝塔面板可以一键修改对应规则。
Nginx服务器伪静态规则
在宝塔网站设置的伪静态选项中,选择ThinkPHP规则,或者手动添加以下规则:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
}
Apache服务器伪静态规则
如果使用Apache服务器,需要在public目录下确认存在.htaccess文件,内容如下:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
修改完成后重启对应Web服务,此时访问网站根地址就不需要再携带index.php了。
配置多应用模块路由
ThinkPHP6默认开启了多应用模式,需要先通过Composer安装多应用扩展,在项目根目录执行命令:
composer require topthink/think-multi-app
应用入口与自动识别
多应用模式下,默认的应用访问规则是域名后直接跟应用名,比如访问admin应用下的index控制器的index方法,地址为http://域名/admin/index/index。如果需要将某个应用设置为默认应用,可以在config/app.php中修改deny_app_list和default_app配置:
<?php
return [
// 默认应用
'default_app' => 'index',
// 禁止访问的应用列表
'deny_app_list' => ['common'],
];
自定义模块路由配置
每个应用可以有独立的路由配置,在对应应用的route目录下创建路由文件,比如admin应用的路由文件app/admin/route/app.php,示例配置如下:
<?php
use thinkfacadeRoute;
// 定义admin应用的路由,访问地址为http://域名/admin/dashboard
Route::get('dashboard', 'index/index');
// 带参数的路由
Route::get('user/:id', 'user/read');
如果需要全局统一路由前缀,可以在config/route.php中配置url_route_must和url_router_class等参数,也可以在每个应用的路由文件中添加统一前缀:
<?php
use thinkfacadeRoute;
// 给当前应用的所有路由添加api前缀
Route::group('api', function () {
Route::get('list', 'index/list');
Route::post('add', 'index/add');
});
常见问题排查
如果配置完成后出现404或者路由不匹配的问题,可以先检查以下几点:
- 确认网站运行目录是否设置为public,否则入口文件无法正确加载
- 检查伪静态规则是否生效,可以在public目录下创建一个测试html文件,访问确认是否能正常打开
- 确认多应用扩展已经正确安装,执行composer show topthink/think-multi-app查看是否安装成功
- 检查路由配置文件的语法是否正确,是否有重复定义的路由规则
完成以上所有配置后,ThinkPHP6多应用模式的交互网站就可以在宝塔面板下正常运行,index.php被隐藏,模块路由也能按照预期匹配访问。