跳转到主内容
极星编程网:以代码为星,赴技术山海!

phpEnv实现多域名指向同一站点的配置技巧

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,实时准确。 PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 立即学习 “ PHP免费学习笔记(深入) ”; 判断主站与 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 或重定向到主域。

相关文章