跳到主要内容
外观
外观设置
显示模式
主题配色

保存在此浏览器,所有页面通用。

Apache 重定向到 HTTPS:HTTP 自动跳转配置

2,431 次浏览0 次点赞

Apache 可以通过重定向规则,将网站的 HTTP 请求自动跳转到 HTTPS。本文介绍 Apache 2.4 中两种常用方法:在虚拟主机中使用 Redirect,以及在 .htaccess 中使用 mod_rewrite。

前提条件:网站已安装有效证书,能够通过 HTTPS 正常访问。以下示例适用于 Apache 直接提供 HTTPS 的环境,请将 www.example.com 替换为实际域名。两种方法按需选择一种即可。

一、在虚拟主机中配置重定向

如果可以修改 Apache 的站点配置,推荐在网站的 80 端口虚拟主机中添加 Redirect 指令。

整站重定向到 HTTPS

<VirtualHost *:80>
    ServerName www.example.com

    Redirect permanent "/" "https://www.example.com/"
</VirtualHost>

permanent 表示返回 301 永久重定向。访问 HTTP 地址时,浏览器会跳转到对应的 HTTPS 地址,原有路径和查询参数会保留。

例如,访问 http://www.example.com/docs/page.html,将跳转到 https://www.example.com/docs/page.html。

注意:这条规则只放在处理 HTTP 的虚拟主机中,443 端口虚拟主机继续提供正常的 HTTPS 内容。

只重定向指定目录

如果只需要将 /secure 及其下级路径重定向到 HTTPS,可以在现有的 80 端口虚拟主机中,使用下面这条规则替代整站重定向规则:

Redirect permanent "/secure" "https://www.example.com/secure"

例如,http://www.example.com/secure/account.html 将跳转到 https://www.example.com/secure/account.html,其他路径不受这条规则影响。

二、使用 .htaccess 重定向到 HTTPS

如果无法修改虚拟主机配置,可以在网站根目录的 .htaccess 文件中添加:

RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]
  • RewriteEngine On:开启重写引擎。
  • RewriteCond %{HTTPS} !=on:仅在当前连接未使用 HTTPS 时执行跳转,避免 HTTPS 请求反复重定向。
  • %{REQUEST_URI}:保留请求路径;本例未设置新的查询字符串,原查询参数也会保留。
  • R=301:返回 301 永久重定向。
  • L:停止处理本轮后续重写规则。

此方法要求服务器已加载 mod_rewrite,并允许该目录通过 .htaccess 使用相关指令,例如配置了 AllowOverride FileInfo 或相应的 AllowOverrideList 权限。

WordPress 网站可以将上述规则放在 # BEGIN WordPress 标记之前。

三、使配置生效并检查结果

修改虚拟主机配置后,需要检查配置并重新加载 Apache。提供 apachectl 的 Linux 环境可以先执行:

sudo apachectl configtest

检查通过后,再执行:

sudo apachectl graceful

不同安装方式的管理命令可能不同,请以实际环境为准。单独修改 .htaccess 通常不需要重新加载 Apache。

使用以下命令检查重定向:

curl -I http://www.example.com/

确认响应状态为 301,且 Location 指向正确的 HTTPS 地址,再检查文章页等其他路径是否正常。

测试期间可以先使用 302 临时重定向:将 permanent 改为 temp,或将 R=301 改为 R=302;确认无误后再改为 301。

代理环境说明:如果 HTTPS 由前置 CDN 或反向代理处理,而代理通过 HTTP 连接 Apache,上述协议判断可能引起循环跳转。这种情况下应在前置代理配置跳转,或结合可信代理提供的原始协议信息调整规则。