跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

phpEnv配置Nginx强制HTTPS访问 phpEnv 301重定向

phpEnv默认不自动配置HTTP跳HTTPS的return 301规则,必须手动在vhost对应80端口server块中添加return 301 https://$host$request_uri;,否则HTTPS配置无效;API接口需改用return 307避免方法丢失。 phpEnv 默认用 Nginx,但它的 80 端口 server 块默认不包含
return 301
跳转逻辑,必须手动补上;否则 HTTPS 配置再完整,HTTP 请求仍会直接走明文响应。 确认 phpEnv 的 Nginx 配置文件位置 phpEnv 的站点配置通常不在全局
nginx.conf
,而是在用户目录下的虚拟主机配置中,例如:
C:\phpEnv\nginx\vhost\your-site.conf
(Windows)或
/usr/local/phpenv/nginx/vhost/your-site.conf
(Linux/macOS)。不要改错文件——改了全局
nginx.conf
可能被 phpEnv 后续更新覆盖。 先检查该文件是否存在、是否被 phpEnv 实际加载(看
nginx -t
输出里是否包含该路径) 若无此文件,phpEnv 可能正使用默认的
default.conf
,需定位到
conf/vhost/
下对应入口 确保你编辑的是当前生效的 server 块,不是注释掉的备用段 在 80 端口 server 块中写
return 301
必须在一个明确监听
80
的
server
块内添加跳转,不能塞进 443 的块里。常见错误是把跳转写在 HTTPS server 块里,完全无效。 找到类似这样的结构:
server { listen 80; server_name example.com; ... }
在
server_name
后、
location
前插入一行:
return 301 https://$host$request_uri;
如果支持多域名,
server_name
应包含所有要跳转的域名,如:
server_name example.com www.example.com;
别用
rewrite
—— phpEnv 的 Nginx 版本较新,
return
更轻量、更可靠 POST 接口失效?换
return 307
而不是
return 301
当你发现 APP 或前端调用后端 API 时,HTTP → HTTPS 跳转后 POST 变成 GET、
$_POST
为空、
$request_body
日志为空,基本就是 301 导致浏览器/客户端自动降级方法。搜索引擎和 SEO 不关心接口,但业务逻辑必须保方法。 稿定在线PS PS软件网页版 下载 立即学习 “ PHP免费学习笔记(深入) ”; 把原来的
return 301 https://$host$request_uri;
改成
return 307 https://$host$request_uri;
307 不会改变原始请求方法和 body,适合 API 场景;301 是给页面跳转用的 注意:307 不会被浏览器长期缓存,所以后续调试要清空本地 DNS 和重定向缓存(Chrome 开发者工具 Network → Disable cache) 如果必须兼顾 SEO 页面 + 接口,可拆成两个 server 块:一个只处理
location ^~ /api/
用 307,其余用 301 —— 但 phpEnv 默认不带这种精细路由,不推荐初学者折腾 重载 Nginx 前务必验证语法与证书状态 phpEnv 的 Nginx 服务管理命令不统一,有些版本用
phpenv restart nginx
,有些得进任务管理器或系统服务里手动重启。但不管怎么启,第一步永远是验证配置。 执行
nginx -t
(Windows 下可能需进
C:\phpEnv\nginx\
目录运行)—— 出现
success
才能继续 检查 HTTPS 的
ssl_certificate
和
ssl_certificate_key
路径是否真实存在,且权限可读(尤其 Linux 下常因权限拒绝启动) 浏览器访问
http://yoursite.test
后,看地址栏是否跳转、是否出现锁图标;用
curl -I http://yoursite.test
确认返回
301
或
307
和
Location
头 跳转生效后,立刻检查混合内容(Mixed Content)警告:页面里若有
http://
的 JS/CSS/图片链接,Chrome 会直接拦截,导致白屏或功能异常 最易被忽略的是:phpEnv 的「HTTPS 开关」只是生成证书和启用 443 端口,并不自动加跳转规则;很多人开了 HTTPS 却忘了配 80 端口的
return
,结果 HTTP 还能照常访问——这等于没开 HTTPS。

相关文章