phpenv中.htaccess重写失效主因是allowoverride none,需手动修改vhost配置文件中的块为allowoverride all,并重启apache;强制https跳转推荐用端口判断而非%{https}变量。

phpEnv 的 Apache 配置不认 .htaccess 重写规则?
phpEnv 默认启用 AllowOverride None,这意味着即使你写了 RewriteCond 和 RewriteRule,Apache 也会直接忽略 .htaccess 文件。这不是你规则写错了,而是服务器压根没开解析权限。
解决方法是手动修改 phpEnv 内置 Apache 的虚拟主机配置:
- 打开
phpEnv\Apache\conf\vhost\your-site.conf(路径以你实际站点名为准) - 找到对应
<directory></directory>块 - 把里面的
AllowOverride None改成AllowOverride All - 确保
RewriteEngine On已启用(通常默认开着)
改完必须重启 Apache,否则无效。phpEnv 界面右下角托盘点“重启 Apache”即可,别只刷新页面。
在 phpEnv 中用 .htaccess 强制跳转 HTTPS 的正确写法
phpEnv 基于 Apache,但部分版本对 %{HTTPS} 变量识别不稳定——尤其当你用反代或本地调试时,$_SERVER['HTTPS'] 可能为空或为 off,而 %{HTTPS} off 却不触发。更可靠的是用端口判断:
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
这个规则不依赖 SSL 状态变量,只看当前请求是否走 443 端口,对 phpEnv 本地环境兼容性更好。注意:[R=301,L] 中的 L 很关键,漏了可能导致后续重写冲突。
phpEnv 启用 HTTPS 前必须确认证书已加载
强制跳转只是“推”,但没 HTTPS 服务本身,“推”过去就是连接失败。phpEnv 不自动配置 443 端口和证书,你得手动补全:
- 确认你的 SSL 证书(
cert.pem和key.pem)已放在phpEnv\Apache\conf\ssl\下 - 在
vhost\your-site.conf中新增一个监听 443 的<virtualhost></virtualhost>块,并正确指向证书路径 - 务必开启
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 资源(比如 <img src="http://...>%EF%BC%89%EF%BC%8C%E5%B0%B1%E4%BC%9A%E8%A2%AB%E6%8B%A6%E6%88%AA%E5%B9%B6%E6%8A%A5%20Mixed%20Content%20%E9%94%99%E8%AF%AF%E3%80%82%E8%BF%99%E4%B8%8D%E6%98%AF%20phpEnv%20%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%8C%E8%80%8C%E6%98%AF%20PHP%20%E6%A8%A1%E6%9D%BF%E6%88%96%20CMS%20%E8%BE%93%E5%87%BA%E7%9A%84%E7%A1%AC%E7%BC%96%E7%A0%81%E9%93%BE%E6%8E%A5%E6%B2%A1%E6%9B%B4%E6%96%B0%E3%80%82
%E4%B8%B4%E6%97%B6%E7%BB%95%E8%BF%87%EF%BC%88%E4%BB%85%E6%B5%8B%E8%AF%95%E7%94%A8%EF%BC%89%EF%BC%9A%E5%9C%A8%20.htaccess%20%E9%A1%B6%E9%83%A8%E5%8A%A0%E4%B8%80%E8%A1%8C%20Header%20always%20set%20Content-Security-Policy%20?x-oss-process=image/resize,p_40" 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。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











