ThinkPHP6.0多应用模式下admin模块必须单独配置Nginx伪静态规则,否则无法识别应用名;需用正则捕获提取s=admin/xxx,并配合think-multi-app扩展、启用auto_multi_app及正确导入路由。

要单独配。
ThinkPHP6.0多应用模式下,admin模块不是自动识别的子目录,而是整个URL路径首段(如 /admin/login 中的 admin)被用作应用名。框架靠这个前缀决定加载哪个应用(app/admin/),但前提是——Nginx 或 Apache 必须把这段前缀完整、准确地传给入口文件,不能截掉、不能忽略。
默认的单应用伪静态规则(比如宝塔自带的 rewrite ^(.*)$ /index.php?s=$1 last;)会把 /admin/login 整个路径当做一个字符串塞进 s= 参数,结果变成 s=/admin/login,而TP6实际需要的是 s=admin/login(注意开头没有斜杠)。更严重的是,它根本没提取出 admin 这个应用标识,导致框架一律 fallback 到 default_app(通常是 index),于是 /admin/login 被当成 /login 处理,控制器找不到,页面空白或404。
所以 admin 模块不是“要不要单独配”,而是必须用带正则捕获的规则显式提取应用名。
你需要的 Nginx 伪静态规则是:
if(!-e $requestfilename) {
rewrite ^/([a-z0-9A-Z-]+)/(.)$ /public/index.php?s=$1/$2 last;
rewrite ^/(.)$ /public/index.php?s=$1 last;
}
说明:
- 第一行匹配
/admin/xxx类请求,提取admin和xxx,拼成s=admin/xxx - 第二行兜底处理
/、/robots.txt、/static/xxx等无前缀路径 -
last不可换为break,否则查询参数丢失、PATH_INFO 异常 - 运行目录必须设为
/public(宝塔网站设置里选,不是手动填)
另外三项必须同步:
- ✅ 安装
think-multi-app扩展(composer require topthink/think-multi-app) - ✅
config/app.php中开启'auto_multi_app' => true并设'default_app' => 'index' - ✅
app/下真实存在app/admin/目录,且其route.php已在config/route.php中通过Route::import('admin', 'admin')显式导入
不配这套规则,admin 模块就只是个摆设目录,永远进不去。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











