apache全站强制跳转https的核心是rewritecond %{https} !=on判断非https请求,再用rewriterule ^(.*)$ https://%{http_host}%{request_uri} [r=301,l]原路重定向,需启用mod_rewrite和mod_ssl模块、allowoverride all,并避免循环重定向。

Apache 全站强制跳转 HTTPS,核心是用 RewriteCond 判断是否非 HTTPS 请求,再用 RewriteRule 把整个请求原路重定向到 HTTPS 版本。配置要简洁、安全、不丢参数,且避免循环重定向。
确认基础模块已启用
确保以下两行在 httpd.conf 或主配置中已取消注释:
LoadModule rewrite_module modules/mod_rewrite.soLoadModule ssl_module modules/mod_ssl.so
若使用虚拟主机配置(如 httpd-vhosts.conf),还需确认对应 <virtualhost></virtualhost> 块内启用了重写引擎:RewriteEngine On
推荐的 RewriteRule 配置(标准写法)
在监听 80 端口的虚拟主机中添加:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
RewriteCond %{HTTPS} !=on<br>RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
-
%{HTTPS} !=on是最可靠判断方式,比%{SERVER_PORT} !^443$更稳妥(不受端口自定义影响) -
^(.*)$匹配全部路径,包括空路径和带查询参数的 URL -
%{HTTP_HOST}保留原始域名(支持多域名共用同一规则) -
%{REQUEST_URI}完整保留路径 + 查询字符串(如/page?id=1&ref=test) -
[R=301,L]表示永久重定向且立即终止后续规则匹配
注意事项与常见避坑点
以下情况容易导致错误,需特别留意:
- 若网站根目录下有
.htaccess,请确保其所在目录的<directory></directory>块中设置了AllowOverride All(不能是None) - 不要在 HTTPS 的
<virtualhost></virtualhost>中重复写相同规则,否则可能引发重定向循环 - 避免混用
Redirect和RewriteRule处理全站跳转,二者逻辑不同,叠加易出错 - 配置完成后务必重启 Apache:
sudo systemctl restart httpd或apachectl graceful - 用浏览器开发者工具检查响应头,确认返回的是
301 Moved Permanently,且Location值为正确的 HTTPS 地址
可选:排除特定路径不跳转(如健康检查)
如果某些路径(如 /.well-known/acme-challenge/ 或 /health)需要保持 HTTP 访问,可在规则前加排除条件:
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/ [NC]<br>RewriteCond %{HTTPS} !=on<br>RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
多个排除可用多个 RewriteCond 连续写,Apache 会按顺序“与”判断。










