phpenv 界面没有“自动加 www”开关,因其仅提供服务启停和php版本切换,不生成rewrite规则;需手动在vhosts配置文件中用return 301实现跳转,并重载nginx生效。

phpEnv 本身不处理域名跳转,Nginx 的重定向必须在 nginx.conf 或站点配置文件中手动配置;phpEnv 只是提供一键启停和界面管理,它不会自动生成或覆盖 rewrite 规则。
为什么 phpEnv 界面里找不到“自动加 www”开关
phpEnv 是 Windows 下的集成环境套件,底层用的是 Nginx(通常是 1.16/1.18),但它没有内置域名标准化功能。所有 server 块、rewrite、return 指令都得你手动写进配置里——它的 Web 管理页只管服务启停、PHP 版本切换、MySQL 连接,不碰 server_name 和 rewrite。
- 修改后必须点击 phpEnv 界面的「重载 Nginx」或手动执行
nginx -s reload才生效 - phpEnv 默认把站点配置放在
phpEnv\nginx\vhosts\目录下,每个子目录对应一个虚拟主机,主配置入口是vhosts\default.conf或你命名的your-site.conf - 别去改
nginx.conf根配置里的http块,容易被 phpEnv 升级覆盖
在 phpEnv 的 vhosts 配置里加 www 跳转(推荐用 return)
比起 if + rewrite,直接用 return 301 更快、更安全,也避免 Nginx 的 if 陷阱(比如在 location 块里误用导致循环)。
假设你要把 example.com 和 www.example.com 都收口到 https://www.example.com,在你的 vhosts\example.conf 里这样写:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://www.php.cn/link/59386272857f013b167191da57f9eb91;
}
<p>server {
listen 443 ssl;
server_name example.com;
ssl_certificate cert.pem;
ssl_certificate_key key.pem;
return 301 <a href="https://www.php.cn/link/59386272857f013b167191da57f9eb91">https://www.php.cn/link/59386272857f013b167191da57f9eb91</a>;
}</p><p>server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate cert.pem;
ssl_certificate_key key.pem;</p><h1>正常的 root / index / PHP 处理放这里</h1><pre class="brush:php;toolbar:false;">root "D:/phpEnv/www/example";
index index.php index.html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}}
- 第一个
server块处理所有 HTTP 请求,不管带不带 www,全 301 到 HTTPS 的www - 第二个块专抓 HTTPS 下的非 www 请求(
example.com),再跳一次到www - 第三个块才是真正干活的,只响应
www.example.com的 HTTPS 请求 -
$request_uri保留原始路径和查询参数,比硬写/更稳妥
常见踩坑点:证书、host 匹配、端口监听
跳转配置写完却 502 或无限重定向?先盯住这三处:
- SSL 证书必须同时包含
example.com和www.example.com—— 单域名证书只认其中一个,另一个会触发浏览器警告,导致跳转中断 -
server_name必须精确匹配,不能写*.example.com来代替example.com www.example.com,通配符不参与跳转判断 - 如果用了非标准端口(比如 8080),
listen行必须显式写上listen 8080 ssl,否则 443 外的 HTTPS 请求根本进不来 - phpEnv 自带的 Nginx 默认不开启
ssl_protocols和ssl_ciphers强制策略,老客户端可能握手失败,建议补上 TLSv1.2+ 限制
最麻烦的其实是证书链和本地 hosts 绑定——phpEnv 运行在本机,example.com 得先在 C:\Windows\System32\drivers\etc\hosts 里映射到 127.0.0.1,否则浏览器连 DNS 解析那关都过不去,压根看不到 Nginx 的跳转逻辑。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











