thinkphp本地二级域名需三步协同:①hosts文件添加127.0.0.1 admin.tp6.test等映射并刷新dns;②web服务器(apache/nginx)配置对应virtualhost/server块,documentroot指向public/且servername严格匹配;③框架启用url_domain_deploy=>true并在route中用route::domain()绑定子域名与应用目录。

ThinkPHP本地开发要跑通二级域名,必须同时搞定系统级域名解析和Web服务器路由转发——光配虚拟主机或只改hosts,单独哪一步都打不开页面。
hosts文件怎么写才有效
这是整个流程的起点,写错就全盘失效。打开系统hosts文件(Windows在C:\Windows\System32\drivers\etc\hosts,macOS/Linux在/etc/hosts),用管理员/root权限编辑,在末尾添加:
- 127.0.0.1 admin.tp6.test
- 127.0.0.1 api.tp6.test
- 127.0.0.1 tp6.test
注意:IP和域名之间只能用空格或Tab分隔;域名不能带端口、不能含下划线;每行一个,不要合并;保存时编码选UTF-8无BOM;改完必须刷新DNS缓存——Windows运行ipconfig /flushdns,macOS运行sudo dscacheutil -flushcache。
Apache或Nginx虚拟主机配置要点
Web服务器得知道这些域名该交给哪个项目处理。以Apache为例,在httpd-vhosts.conf里为每个二级域名加一个VirtualHost块:
-
DocumentRoot必须指向public/目录,不是项目根目录。例如:
DocumentRoot "D:/www/myapp/public" -
ServerName要和hosts里写的完全一致,比如
ServerName admin.tp6.test -
Directory区块里必须启用重写:
AllowOverride All,否则ThinkPHP的伪静态路由会404 - 确认httpd.conf中已取消注释:
Include conf/extra/httpd-vhosts.conf和Listen 80
Nginx用户则需在server块中设置server_name admin.tp6.test,并确保root指向public目录,同时location里有正确的PHP处理和PATH_INFO支持。
ThinkPHP框架侧关键配置
光靠Web服务器还不够,框架本身要识别并响应二级域名。在config/app.php中开启:
-
'url_domain_deploy' => true,(TP6唯一有效的开关,APP_SUB_DOMAIN_DEPLOY已废弃)
然后在app/common/route.php或route/app.php中注册规则:
-
Route::domain('admin', 'admin');→ 访问admin.tp6.test时加载app/admin/应用 -
Route::domain('api', 'api');→ 访问api.tp6.test时加载app/api/应用 -
Route::domain('*', 'index');→ 其他未匹配域名(如tp6.test)走默认应用
注意:右侧字符串是应用目录名(如app/admin/),不是控制器或方法;不需要改app_host或url_domain_root,本地调试留空最稳妥。
常见打不开的三个原因
90%的问题不在这儿出错,而是卡在中间环节:
- 浏览器输的是
admin.tp6.test,不是http://admin.tp6.test——少http://会被当成搜索词 - 改完vhost没重启服务:Apache执行
httpd -k restart,Nginx执行nginx -s reload - DocumentRoot路径错误,或者public/目录下没有index.php,导致直接返回403或404
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











