thinkphp 5 多域名绑定必须配置 config/app.php 中的 domain_bind 数组,键为完整域名(如'admin.example.com'或'localhost:8080'),值为对应真实应用目录名(如'admin'),否则 route::domain() 仅作路由分支不切换上下文,导致控制器找不到、视图路径错误、中间件不加载。

ThinkPHP 5 多域名绑定不能只靠 Route::domain() 写在路由文件里就完事,必须配合 app.php 中的 domain_bind 配置才能真正实现「不同域名走不同模块」——否则所有请求都 fallback 到默认应用(通常是 app),控制器找不到、视图路径错、中间件不加载。
domain_bind 是硬绑定前提,不是可选项
TP5 的多域名模块隔离依赖的是应用级分流,不是路由层过滤。domain_bind 在 config/app.php 里,格式是数组,键为完整域名(含端口),值为对应的应用目录名:
-
'admin.example.com' => 'admin'表示该域名请求会切换到app/admin/目录上下文 - 值必须是真实存在的目录,且含
controller/、route/、config/等标准结构 - 本地开发用
localhost:8080,配置就得写'localhost:8080' => 'admin',不能省略端口 - 若没配
domain_bind,Route::domain()只是加了一组额外路由,控制器仍从app/controller/下找,报错class not found: app\controller\Index
Route::domain() 只适合子域名或同应用内分流
Route::domain() 本质是路由条件分支,不改变应用上下文。它适合:
- 同一应用下区分
user.example.com和admin.example.com,共用app/目录但路由前缀不同 - 需要复用全局中间件、共享数据库连接、统一日志通道的场景
- 闭包内必须用
Route::get()、Route::group()等定义具体路由,不能只写Route::domain('x', 'index/index')(第二参数不支持字符串) - HTTPS 或带端口的域名需完整匹配
$_SERVER['HTTP_HOST'],本地调试建议加if (APP_DEBUG) Route::domain('localhost:8000', [...])
Web 服务器必须把域名正确转发到入口
Apache/Nginx 不做域名识别,所有请求都得落到 ThinkPHP 入口(public/index.php),否则框架根本没机会执行 domain_bind。常见卡点:
- Apache:
<virtualhost></virtualhost>的DocumentRoot必须指向项目public/目录,不是项目根目录 - Apache:每个
<virtualhost></virtualhost>里必须有AllowOverride All,否则.htaccess重写失效,404 - Nginx:
server块的root指向public/,且location ~ \.php$中必须有fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name - hosts 文件必须映射成功(如
127.0.0.1 admin.test),且浏览器访问时 URL 地址栏显示的域名要和domain_bind键完全一致
session 和缓存需手动适配多域名
即使域名绑定了,登录态也不会自动共享。关键点在 cookie 和缓存 key:
- session 共享必须设
config/session.php中的'cookie_domain' => '.example.com'(注意开头的点) - token 类认证,缓存 key 要包含域名信息,比如
'token_'.$uid.'_'.md5(request()->host()) - 前端跨域请求(如
fe.example.com调api.example.com)必须开 CORS 并允许 credentials,否则 cookie 不携带 - 本地开发无法用
localhost测试 cookie domain,得切到dev.example.com这类真实二级域名
最易被忽略的是:TP5 不支持运行时切换应用上下文。一旦启动,App::run() 就锁定了命名空间、配置路径、中间件列表。所以 domain_bind 必须在请求最开始就被识别,任何试图在中间件或控制器里动态改 APP_NAME 或 Config::set() 的做法都会失败。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











