thinkphp6.0多应用路由不生效的核心原因是请求未进入对应应用的路由加载流程。首要排查web服务器是否将请求正确转发至public/index.php,确认根目录为public、伪静态规则支持前缀捕获且nginx用last而非break;其次检查app_multi开启、multi.php配置合法、各应用含route.php;再确保在config/route.php中显式调用route::import('admin','admin');最后验证子应用路由定义规范,避免重复写应用名、控制器路径与类名大小写准确、资源路由参数绑定正确。

ThinkPHP6.0多应用模式下路由文件不生效,核心原因不是“规则没写对”,而是请求压根没进到对应应用的路由加载流程——框架根本没识别出该走哪个应用,自然不会加载它的 route.php。
Web服务器没把请求交给框架
这是最常被忽略的第一关。如果访问 /admin/login 直接返回 Nginx 或 Apache 的 404(白页),而不是 TP6 的黄色调试页,说明请求根本没到达 public/index.php。
- 确认网站根目录是
public/,不是项目根目录 - 宝塔用户必须删掉默认伪静态规则,换成支持前缀捕获的版本:
if(!-e $request_filename) { rewrite ^/([a-z0-9A-Z_\-]+)/(.*)$ /index.php?s=$1/$2 last; rewrite ^/(.*)$ /index.php?s=$1 last; } - Nginx 需确保
last不写成break,否则PATH_INFO丢失,url()生成链接会丢应用名
应用未正确识别与绑定
即使请求进了 index.php,TP6 也不会自动按 URL 路径切换应用,必须手动干预。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 检查
config/app.php中'app_multi' => true是否为布尔 true - 确认
app/multi.php存在且返回合法数组,如return ['admin', 'api', 'home']; - 每个应用目录(如
app/admin)下必须有route.php文件(哪怕为空),缺了会报App not exists: admin - 域名绑定不能只靠
config/app.php的domain_bind,得在public/index.php里显式绑定:if ($_SERVER['HTTP_HOST'] === 'admin.example.com') { \think\App::bind('admin'); }
路由没被主动导入或位置错误
TP6 不会自动扫描子应用的路由文件,必须在全局入口中显式导入。
- 确保
config/route.php顶部有use think\facade\Route; - 逐个调用
Route::import('admin', 'admin');—— 第二个参数必须是真实应用名,写错或漏掉都会 404 - 新增应用后,务必追加对应的
Route::import(),否则新模块路由完全不可达 - Linux 下注意
route/目录权限,曾有案例因权限不足(非 755 或 777)导致路由文件无法读取
路由定义本身不符合多应用规范
子应用内的路由写法有严格上下文约束,写错路径会导致匹配失败。
- 在
app/admin/route.php中,应写Route::get('login', 'Index/login');,不是Route::get('admin/login', ...)(重复应用名会解析错位) - 控制器路径必须是
app/controller/Index.php,类名必须是app\controller\Index,大小写敏感 - 资源路由参数名必须为
$id;若业务用$uid,需显式绑定:Route::resource('users', 'User')->bind(['id' => 'uid'])
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










