thinkphp中实现前后端路由域名隔离,核心是通过路由分组绑定域名或启用多应用模式;前者在route.php中按www.example.com和admin.example.com分别定义路由及控制器路径,后者通过入口文件判断host切换app_name;需统一cookie域、配置cors,并确保nginx/apache将子域名指向同一public目录。

ThinkPHP 中实现前后端路由域名隔离,核心是利用 多应用模式 或 路由分组 + 域名绑定,让前端(如 www.example.com)和后端(如 admin.example.com)请求分别进入不同路由逻辑,互不干扰。
使用域名绑定路由分组
这是最常用、最轻量的方式,无需拆分成多个应用,适合中小项目。在 route/route.php 中按域名定义路由分组:
- 前端域名(如
www.example.com)只加载前台路由,控制器放在app\index\controller\ - 后台域名(如
admin.example.com)绑定独立分组,控制器建议放在app\admin\controller\ - 每个分组内可设置统一前缀(如
/api或/manage),也可直接响应根路径
示例代码:
use think\facade\Route;
// 前台域名
Route::domain('www.example.com', function () {
Route::get('/', 'index/index');
Route::get('article/:id', 'index/article');
});
// 后台域名
Route::domain('admin.example.com', function () {
Route::get('/', 'admin/index');
Route::get('user/list', 'admin/user/list');
Route::post('user/add', 'admin/user/add');
});
配合应用多模块或独立应用结构
若前后端逻辑差异大、权限体系分离明显,推荐用 多应用模式(ThinkPHP 6+ 支持):
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 创建两个应用:
app/index(前台)、app/admin(后台) - 各自拥有独立的
route.php、中间件、配置文件 - 通过域名自动切换应用入口:在
public/index.php中根据$_SERVER['HTTP_HOST']设置默认应用名
例如在入口文件中加判断:
$host = $_SERVER['HTTP_HOST'];
if (str_starts_with($host, 'admin.')) {
define('APP_NAME', 'admin');
} else {
define('APP_NAME', 'index');
}
注意跨域与 Cookie 域名适配
域名隔离后,前端调用后台接口会涉及跨域问题,需明确处理:
- 前端页面在
www.example.com,调用admin.example.com/api接口时,必须开启 CORS(可在中间件中统一设置Access-Control-Allow-Origin) - 登录态共享需统一 Cookie 的 domain(如设为
.example.com),否则www和admin无法共用 session - 建议后台 API 接口统一返回 JSON,并启用 Token 鉴权,减少对 Cookie 的依赖
Nginx/Apache 配置辅助
确保域名正确解析到同一套代码,Web 服务器无需做特殊转发,但要避免静态资源冲突:
- 所有子域名指向同一个
public/目录 - 静态资源(CSS/JS/Images)可统一放在
public/static/,或通过 CDN 分发 - 如需强制 HTTPS 或跳转,应在 Web 服务器层配置,而非 PHP 路由中硬跳
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










