发布于2026-07-09 阅读(0)
扫一扫,手机访问
坦白说,phpEnv 本身并不直接处理多域名绑定这件事。想让多个域名指向同一个根目录,本质上靠的是两样东西的配合:phpEnv 内置的 Nginx 配置,加上系统的 hosts 文件。别名域名并不是 phpEnv 给你开了个什么开关,说白了,就是在 Nginx 的 server_name 指令里多写几个域名而已。
phpEnv 默认把站点配置扔在 /phpenv/vhost/ 目录下,每个站点对应一个 .conf 文件(比如 default.conf 或者你自定义的站点名.conf)。它不像宝塔那样给你一个“别名”的图形入口,所有域名都得手动塞进 server_name 那一行。
.conf 文件(比如 default.conf),用管理员权限打开它server_name localhost; 这一行server_name local.test www.local.test api.local.test;http:// 或者端口号nginx -t 检查语法,没问题再执行 nginx -s reload 让配置生效nginx -s reload 没执行,或者系统 hosts 文件里没加上对应的映射phpEnv 可不会自动帮你写 hosts 文件。这一步要是漏了,浏览器根本没法把你的请求发到本地的 Nginx。Windows 系统的 hosts 文件在 C:\Windows\System32\drivers\etc\hosts,macOS 或 Linux 则在 /etc/hosts。
127.0.0.1 local.test,前后不要有多余的空格或 tab 键www.local.test,local.test 就自动生效了——这两个是独立的域名,需要分别添加ping local.test,确认返回的地址是 127.0.0.1。否则,Nginx 根本收不到这个 Host 头ipconfig /flushdns 刷新 DNS 缓存;macOS 用户则执行 sudo dscacheutil -flushcache遇到这种情况,通常不是 phpEnv 的锅,而是 Nginx 的匹配逻辑被绕过了。Nginx 会按 server 块的顺序来匹配,第一个 server_name 匹配上的才会生效。
server 块(比如 default.conf)监听了 *:80 端口,并且它的 server_name 是空的或者设为 _。这种配置会像一个兜底网,捕获所有未匹配的域名.conf 文件确实被主 nginx.conf 里的 include 指令加载了,路径别写错了server_name 必须同时出现在 http 和 https 两个 server 块里。否则,HTTP 域名能通,HTTPS 域名就会 404.user.ini 文件或者启用了 open_basedir,新增域名访问时,PHP 可能会因为路径限制报错。这可不是 Nginx 层面的 404,而是 PHP 层面的问题了这时候,光靠 Nginx 配置就不够了,需要在 PHP 的入口层做判断。比如,可以在 index.php 的开头加上这样一段逻辑:
if ($_SERVER['HTTP_HOST'] === 'api.local.test') {
require __DIR__ . '/api/index.php';
exit;
}
if ($_SERVER['HTTP_HOST'] === 'admin.local.test') {
require __DIR__ . '/admin/index.php';
exit;
}
$_SERVER['HTTP_HOST'] 这个值客户端是可以伪造的。在生产环境中,最好配合一个白名单来做校验,安全第一requireheader("Location: ...") 跳转来模拟——那样会暴露真实路径,对 SEO 也不友好最后想叮嘹一句,其实最容易被忽略的就是配置重载这件事。很多人卡在“明明写了域名却打不开”这一步,其实只是忘了敲 nginx -s reload,或者忘了在 hosts 文件里做映射。这两步,少一个都不行。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8