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