ThinkPHP本地开发必须修改hosts文件,因为其依赖域名访问(如http://tp6.test)匹配路由,而localhost无法正确解析伪静态路径,导致404;只需在hosts中添加“127.0.0.1 tp6.test”,并刷新DNS缓存即可。

ThinkPHP 本地开发为什么必须改 hosts 文件
因为 ThinkPHP 默认依赖域名访问(比如 http://tp6.test)来匹配路由和模块,而本地没有真实 DNS 解析,浏览器根本打不开带路径的伪静态地址(如 http://localhost:8000/index/index)——尤其开启 url_html_suffix 或使用 route 模块时,localhost 会直接 404 或跳转异常。
改 hosts 不是为了“看起来专业”,是绕过浏览器对 localhost 的特殊处理、让 Apache/Nginx 把请求真正交给 ThinkPHP 的入口文件 public/index.php。
- 不改
hosts,http://tp6.test根本解析不到你本机 - 只配 Web 服务器虚拟主机但不改
hosts,等于白配——请求发不出去 - Windows 和 macOS 的
hosts路径不同,但格式完全一致,别抄错换行符
怎么写 hosts 才能让 ThinkPHP 正常跑起来
核心就一行:127.0.0.1 tp6.test。重点不是“写什么”,而是“写在哪”和“怎么生效”。
- Windows:用管理员权限打开
C:\Windows\System32\drivers\etc\hosts,追加一行,保存时选“所有文件”类型,编码用 UTF-8 无 BOM - macOS/Linux:终端执行
sudo nano /etc/hosts,添加后Ctrl+O → Enter → Ctrl+X - 改完必须刷新 DNS 缓存:
ipconfig /flushdns(Win)或sudo dscacheutil -flushcache(macOS) - 别加
www.前缀除非你真在虚拟主机里也配了www.tp6.test,否则 404
ThinkPHP 的 app_host 和 url_domain_root 配置要不要动
绝大多数本地开发场景下——不用动。ThinkPHP 6 的 app_host 是给多应用跨域用的,url_domain_root 是生成 URL 时补全域名用的,本地调试时留空或设为 '' 最安全。
- 如果在
config/app.php里硬写了'app_host' => 'tp6.test',反而会导致命令行php think命令出错(报Invalid Host) -
url_domain_root设成'http://tp6.test'后,url('index/hello')会输出完整链接,适合生成邮件或 API 返回,但本地页面跳转没必要 - 真正要检查的是
public/.htaccess(Apache)或nginx.conf里的root是否指向public/目录,否则域名再对也 403
改完 hosts 还打不开?先查这三件事
90% 的“绑定了没反应”问题,跟 hosts 本身无关,而是中间环节断了。
- 浏览器地址栏输的是
http://tp6.test,不是tp6.test(少http://会触发搜索引擎搜索) - Web 服务没重启:Apache 改完
vhost必须httpd -k restart,Nginx 要nginx -s reload - ThinkPHP 缓存没清:
php think clear或手动删runtime/cache/下所有文件,否则旧路由规则还在生效
复杂点在于:同一台机器多个 ThinkPHP 项目共用一个 hosts 条目时,Web 服务器的 ServerName 或 server_name 必须严格对应,漏一个字母就进错项目根目录。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










