thinkphp二级域名404主因是web服务器未将请求导向index.php:①dns与hosts解析需生效;②虚拟主机server_name/servername须显式匹配二级域名且root/documentroot指向public/;③nginx需配置try_files $uri $uri/ /index.php?$query_string,apache需启用allowoverride all并确保.htaccess有效。

ThinkPHP 配置二级域名报 404,问题通常不在路由定义本身,而在于 Web 服务器未将该二级域名的请求正确导向 ThinkPHP 入口文件。二级域名本质是独立的 Host 请求,必须确保其 DNS 解析、虚拟主机配置、根目录指向和重写规则全部就位,否则请求根本进不了框架,直接被 Nginx 或 Apache 返回 404。
确认二级域名已正确解析并绑定到项目
这是前提。检查:
- DNS 是否已添加 A 记录(如 api.example.com → 服务器 IP)且已生效(可用 dig api.example.com 或 nslookup api.example.com 验证)
- Web 服务器是否为该域名单独配置了虚拟主机(Virtual Host),而非仅用泛域名或主域名配置覆盖
- Nginx 的 server_name 必须显式包含该二级域名,例如:
server_name api.example.com www.api.example.com; - Apache 的 ServerName 和 ServerAlias 同样需明确列出,不能依赖默认 ServerName
检查虚拟主机 root 路径是否指向 public 目录
ThinkPHP 5.1+ 强制要求 Web 根目录为 public/ 子目录。若二级域名的虚拟主机仍指向项目根目录(如 /var/www/myapp),则 /index.php 不在 Web 可访问路径下,所有请求都会 404。
- Nginx:确认 root 指令末尾是
/public,例如:
root /var/www/myapp/public; - Apache:确认 DocumentRoot 指向
/var/www/myapp/public,且对应<directory></directory>块中 AllowOverride All 已启用 - 切勿用
alias替代root,它会导致路径拼接错误
验证重写规则是否在该二级域名配置中生效
二级域名的虚拟主机配置是独立的,主站的伪静态规则不会自动继承。若漏配或错配 try_files,请求就不会转发给 index.php。
- Nginx:在该
server块内,必须有 location / { ... },且含标准重写:
try_files $uri $uri/ /index.php?$query_string; - Apache:确保
public/.htaccess文件真实存在,且虚拟主机中 AllowOverride All 生效(可临时在 .htaccess 中加deny from all测试是否触发 403) - 用 curl -I http://api.example.com/user/list 测试:若返回
Server: nginx但无X-Powered-By: ThinkPHP,说明请求没进 PHP 层
排除 ThinkPHP 自身配置干扰
二级域名部署后,部分 ThinkPHP 配置可能因 Host 变化产生意外行为:
- 检查
config/app.php中 'url_domain_deploy' => true 是否开启——它只影响url()辅助函数生成链接,不解决 404;若开启,需确认app_host是否与当前二级域名一致 - 禁用 'url_route_must' => true 临时测试:强制路由模式会拦截所有未定义路径(包括静态资源),若你还没显式放行
.css、.js,连首页 CSS 都加载失败,页面看似空白实则也是 404 表现 - 运行 php think route:list,确认输出的路由前缀是否符合预期(如显示
GET | /user/list而非GET | /api/user/list)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











