Laravel多租户本地运行报Hostname localhost does not include a subdomain如何解决
解决方案
该报错由Laravel多租户包的子域名校验规则触发,默认不允许无租户子域名的域名(如localhost)直接访问项目,可按以下步骤排查修正:
1. 校验本地hosts配置
- 找到对应系统的hosts文件:
- Windows:
C:\Windows\System32\drivers\etc\hosts - Mac/Linux:
/etc/hosts
- Windows:
- 以管理员权限打开文件,添加你规划的域名映射,示例如下:
127.0.0.1 tenancy.test # 中央域名 127.0.0.1 tenant1.tenancy.test # 测试用租户子域名 - 配置完成后在终端执行
ping tenant1.tenancy.test,确认返回IP为127.0.0.1即配置生效
2. 修正XAMPP Apache虚拟主机配置
- 打开XAMPP安装目录下的
apache/conf/extra/httpd-vhosts.conf文件 - 添加虚拟主机配置,示例如下:
<VirtualHost *:80> DocumentRoot "你的项目绝对路径/public" ServerName tenancy.test ServerAlias *.tenancy.test <Directory "你的项目绝对路径/public"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> </VirtualHost>ServerAlias *.tenancy.test为必填配置,作用是让所有子域名请求都指向当前项目 - 保存配置后重启XAMPP的Apache服务
3. 调整Laravel多租户配置
- 打开项目
config/tenancy.php文件(以常用的stancl/tenancy包为例) - 确认
central_domains参数配置为你的中央域名:'central_domains' => [ 'tenancy.test', ], - 本地临时调试无需子域名校验时,可在项目
.env文件添加TENANCY_ENABLED=false关闭校验,生产环境记得改回开启状态
4. 验证访问
全部配置完成后,不要使用http://localhost访问项目,中央域访问用http://tenancy.test,租户访问用你配置的子域名如http://tenant1.tenancy.test即可。
内容的提问来源于stack exchange,提问作者Uzair
相关产品推荐
相关产品推荐

