phpenv添加域名仍404,根本原因是其仅更新内部缓存,未真实写入nginx/apache的server_name或servername配置;需手动检查vhost文件、同步修改hosts并刷新dns缓存,且必须重载web服务而非仅点界面重启。

phpEnv 本身不处理域名绑定,所有多域名配置都依赖于它所集成的 Web 服务器(Nginx 或 Apache)和系统 hosts 文件——PHP 层只负责接收已路由过来的请求,无法主动“指向”或“解析”域名。
为什么在 phpEnv 里加了域名还是 404?
常见现象:在 phpEnv 界面点击「添加域名」后,访问新域名仍返回 404 或跳转到默认站。根本原因不是 phpEnv 没生效,而是它背后没真正写入 Nginx/Apache 的 server_name 或 ServerName 配置。
- phpEnv 的「添加域名」功能仅更新其内部数据库和部分配置缓存,不一定重写 Web 服务的虚拟主机配置文件
- 若你用的是 Nginx 模式,需手动检查
/phpenv/vhost/xxx.conf中server_name行是否包含新增域名,多个域名用空格分隔 - Apache 模式下要确认
VirtualHost块中ServerName和ServerAlias是否都已补全 - 修改后必须执行
nginx -t && nginx -s reload或httpd -t && systemctl reload httpd,仅点 phpEnv 界面上的「重启」可能不够
hosts 文件必须同步改,且格式不能错
本地测试时,DNS 不参与解析,完全靠系统 hosts 文件映射。漏掉这步,浏览器根本发不出请求到你的 phpEnv 服务。
- Windows 路径:
C:\Windows\System32\drivers\etc\hosts;macOS/Linux:/etc/hosts - 每行严格为:
127.0.0.1 域名,中间只能是**单个空格**,不能 tab、不能带http://、不能写端口(如:8080) - 示例正确写法:
127.0.0.1 local.test、127.0.0.1 api.local.test - 改完必须刷新 DNS 缓存:Windows 运行
ipconfig /flushdns;macOS 运行sudo dscacheutil -flushcache
PHP 代码里识别当前域名要用 $_SERVER['HTTP_HOST']
当多个域名共用同一套 PHP 代码时,业务逻辑常需区分来源。别用 $_SERVER['SERVER_NAME']——它取自 Web 服务器配置,固定不变;而 $_SERVER['HTTP_HOST'] 是客户端实际请求头里的 Host,实时准确。
- 判断主站与 API 域名:
if ($_SERVER['HTTP_HOST'] === 'api.local.test') { /* 返回 JSON */ } - 动态生成资源链接:
$base_url = 'https://' . $_SERVER['HTTP_HOST']; - Session 共享关键:在入口文件(如
index.php)开头加ini_set('session.cookie_domain', '.local.test');,注意开头的点号表示泛匹配子域 - WordPress 类应用还需在
wp-config.php中定义:define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);
最易被忽略的一点:phpEnv 的 Nginx 配置默认不启用 default_server,如果某个域名未被任何 server_name 匹配,请求会落到第一个 server 块,导致内容错乱或暴露目录结构。务必手动在配置中指定一个兜底 server 块,并设 listen 80 default_server;,返回 444 或重定向到主域。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











