跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

phpEnv站点如何开启SSL强制跳转HTTPS phpEnv重写规则配置

phpEnv中.htaccess重写失效主因是AllowOverride None,需手动修改vhost配置文件中的块为AllowOverride All,并重启Apache;强制HTTPS跳转推荐用端口判断而非%{HTTPS}变量。 php Env 的 Apache 配置不认
.htaccess
重写规则? phpEnv 默认启用
AllowOverride None
,这意味着即使你写了
RewriteCond
和
RewriteRule
,Apache 也会直接忽略
.htaccess
文件。这不是你规则写错了,而是服务器压根没开解析权限。 解决方法是手动修改 phpEnv 内置 Apache 的虚拟主机配置: 打开
phpEnv\Apache\conf\vhost\your-site.conf
(路径以你实际站点名为准) 找到对应
块 把里面的
AllowOverride None
改成
AllowOverride All
确保
RewriteEngine On
已启用(通常默认开着) 改完必须重启 Apache,否则无效。phpEnv 界面右下角托盘点“重启 Apache”即可,别只刷新页面。 在 phpEnv 中用
.htaccess
强制跳转 HTTPS 的正确写法 phpEnv 基于 Apache,但部分版本对
%{HTTPS}
变量识别不稳定——尤其当你用反代或本地调试时,
$_SERVER['HTTPS']
可能为空或为
off
,而
%{HTTPS} off
却不触发。更可靠的是用端口判断: 立即学习 “ PHP免费学习笔记(深入) ”;
RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
这个规则不依赖 SSL 状态变量,只看当前请求是否走 443 端口,对 phpEnv 本地环境兼容性更好。注意:
[R=301,L]
中的
L
很关键,漏了可能导致后续重写冲突。 稿定在线PS PS软件网页版 下载 phpEnv 启用 HTTPS 前必须确认证书已加载 强制跳转只是“推”,但没 HTTPS 服务本身,“推”过去就是连接失败。phpEnv 不自动配置 443 端口和证书,你得手动补全: 确认你的 SSL 证书(
cert.pem
和
key.pem
)已放在
phpEnv\Apache\conf\ssl\
下 在
vhost\your-site.conf
中新增一个监听 443 的
块,并正确指向证书路径 务必开启
SSLEngine on
,否则 Apache 启动会报错或静默忽略 443 配置 检查
httpd.conf
是否已取消注释
Include conf/extra/httpd-ssl.conf
行(部分 phpEnv 版本默认注释掉) 证书路径必须是正斜杠或双反斜杠,Windows 下写成
D:\phpEnv\Apache\conf\ssl\cert.pem
会失败,得写成
D:/phpEnv/Apache/conf/ssl/cert.pem
。 跳转后出现混合内容(Mixed Content)警告? 浏览器地址栏显示 HTTPS,但页面里仍加载 HTTP 资源(比如
),就会被拦截并报
Mixed Content
错误。这不是 phpEnv 的问题,而是 PHP 模板或 CMS 输出的硬编码链接没更新。 临时绕过(仅测试用):在
.htaccess
顶部加一行
Header always set Content-Security-Policy "upgrade-insecure-requests"
,它会自动把页面内所有 HTTP 资源请求升级为 HTTPS。 但长期方案必须改源码: – WordPress:后台「设置 → 常规」把「WordPress 地址」和「站点地址」全改成
https://
– 手写 PHP:检查所有
echo 'http://'
、
print $url
类输出,替换为协议相对写法
//example.com/img.png
或动态拼接
$_SERVER['HTTPS'] === 'on' ? 'https' : 'http'
最易忽略的一点:phpEnv 自带的 phpMyAdmin 或其他子应用,如果它们独立运行在子目录,也得各自配 HTTPS 跳转,否则点进去又变回 HTTP。

相关文章