如何实现多个addon domain共享同一套Laravel程序
多附加域名(Addon Domain)共享单套Laravel实例配置方案
你之前已经实现同根域下子域名共享Laravel的配置,addon跨根域共享的核心逻辑和子域名场景完全一致,不需要重复部署代码,只需要调整三层配置即可:
1. 服务器与域名解析配置
- 三个addon域名(abc.com、pqr.com、xyz.com)的A/AAAA记录直接指向Laravel实例所在的服务器IP,和studio.udee.space的解析值保持一致,不要做隐性URL转发,避免请求头丢失、HTTPS判断异常。
- 站点服务配置层面,所有addon域名的文档根目录(Document Root)必须和studio.udee.space的文档根路径完全一致,即指向Laravel项目的
public目录。如果是用cPanel类面板添加addon域名,不要用面板自动生成的独立站点目录,手动填写现有studio.udee.space对应的public路径即可,这是最容易踩的配置坑。 - Nginx/Apache站点配置里不需要给addon域名单独写重写规则,和原有站点共用同一套Laravel的伪静态规则就行。
2. Laravel核心配置调整
- 移除硬编码的域名绑定:打开
config/app.php,修改url配置项为动态读取当前请求域名,避免生成链接时跳转到固定的studio.udee.space:
// 原有硬编码配置要删掉 // 'url' => env('APP_URL', 'https://studio.udee.space'), 'url' => env('APP_URL', request()->getSchemeAndHttpHost()),
- 路由规则适配:如果之前给子域名场景写了
Route::domain('{user}.studio.udee.space')这类绑定固定域名后缀的路由分组,要么移除domain限制让所有域名可匹配,要么把三个addon域名加入路由匹配规则。如果不需要按域名做租户区分,直接去掉domain包裹即可。 - 跨域配置:打开
config/cors.php,把三个addon域名加入允许跨域的源列表:
'allowed_origins' => [ 'https://studio.udee.space', 'https://abc.com', 'https://pqr.com', 'https://xyz.com', ],
- 信任主机配置:打开
app/Http/Middleware/TrustHosts.php,在hosts()方法里把三个addon域名加入信任列表,避免Laravel拦截未知域名的请求:
public function hosts() { return [ 'studio.udee.space', 'abc.com', 'pqr.com', 'xyz.com', $this->allSubdomainsOfApplicationUrl(), ]; }
3. 会话与认证兼容配置
- 打开
config/session.php,把domain配置项设为null,不要硬编码为.udee.space。配置为null时Laravel会自动匹配当前请求域名设置Cookie作用域,不同根域下的会话互相隔离,不会出现登录状态失效、Cookie跨域泄露的问题。 - 如果用了Laravel Sanctum做API认证,打开
config/sanctum.php,把三个addon域名加入stateful配置列表,避免SPA认证请求被拦截。
生效验证
所有配置改完后,在项目根目录执行php artisan config:clear清除配置缓存,分别访问三个addon域名,确认页面正常加载、不会强制跳转到studio.udee.space、表单提交/登录功能正常即可。
如果你需要根据访问域名展示不同站点的内容、品牌信息,只需要加一个全局中间件,通过
request()->getHost()获取当前请求域名,加载对应站点的差异化配置即可,不需要拆分代码库。
内容的提问来源于stack exchange,提问作者Priyanka
相关产品推荐
相关产品推荐

