phpEnv中配置二级域名需三步:修改Nginx的vhost.conf添加server块、在hosts文件添加127.0.0.1 sub.localhost映射、PHP入口用$_SERVER['HTTP_HOST']判断并加载对应逻辑,缺一不可。

phpEnv 是 Windows 下的轻量级 PHP 集成环境(类似 XAMPP、WAMP),它默认不带虚拟主机管理界面,二级域名不能靠点选开启,必须手动改配置文件——否则访问 sub.localhost 会直接 404 或跳回主站。
在 phpEnv 中添加 Nginx server 块
phpEnv 底层用的是 Nginx,配置文件路径通常是 C:phpEnv
ginxconfhost.conf(或 vhostdefault.conf,取决于版本)。不要改 nginx.conf 主文件,只往 vhost 配置里追加独立 server 块。
例如,要让 api.localhost 指向 C:phpEnvwwwpi 目录:
server {
listen 80;
server_name api.localhost;
root "C:/phpEnv/www/api";
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTP_HOST $host;
}
}
-
root路径必须用正斜杠/或双反斜杠\,单反斜杠会解析失败 -
fastcgi_param HTTP_HOST $host这行不能少,PHP 代码里靠$_SERVER['HTTP_HOST']识别当前域名 - 多个二级域名就照着复制粘贴,改
server_name和root即可
本地 hosts 文件必须同步添加解析
Windows 不会自动把 sub.localhost 解析到 127.0.0.1,必须手动写入 C:WindowsSystem32driversetchosts:
127.0.0.1 api.localhost 127.0.0.1 admin.localhost 127.0.0.1 test.localhost
注意:
- 用记事本以管理员身份打开 hosts 文件才能保存成功
- 不能有空格或中文字符,每行一个映射,IP 和域名之间用 Tab 或空格分隔
- 改完不用重启系统,但浏览器可能缓存 DNS,建议清空 DNS 缓存:
ipconfig /flushdns
PHP 层如何根据二级域名加载不同逻辑
入口文件(如 index.php)开头加判断即可,不需要重写 URL 或引入框架:
<?php $host = $_SERVER['HTTP_HOST'] ?? '';
switch ($host) {
case 'api.localhost':
require 'api/router.php';
break;
case 'admin.localhost':
session_set_cookie_params(['domain' => '.localhost']);
session_start();
require 'admin/index.php';
break;
default:
require 'home/index.php';
}
关键点:
-
session_set_cookie_params(['domain' => '.localhost'])才能让 Session 在所有*.localhost间共享(注意开头的点) - 不要用
$_SERVER['SERVER_NAME']判断,它取自 Nginx 的server_name配置,不是用户实际访问的域名 - 如果用的是 phpEnv 自带的 PHP 版本(如 8.1),确保
php.ini中session.cookie_httponly = On和session.cookie_secure = Off(本地开发不用 HTTPS)
最常被忽略的是:改完 Nginx 配置后没重启 phpEnv 的 Nginx 服务,或者改了 hosts 却忘了清 DNS 缓存。这两步任一遗漏,都会表现为“配置写了但域名打不开”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











