将 Joomla 网站迁移到 HTTPS 需要三个步骤:在服务器上安装 SSL 证书,在 Joomla 的全局配置中设置强制 HTTPS,以及添加一个 301 重定向以确保旧的 HTTP 链接能够正常跳转。第三步有一个 Joomla 特有的陷阱,大多数人都会在这里栽跟头,我们会在代码部分之前先讲清楚。
快速解答:先通过你的主机面板安装证书,然后进入系统 > 全局配置 > 服务器,将强制 HTTPS设置为整个网站。要在服务器层面添加重定向,首先要将 Joomla 根目录中的 htaccess.txt 重命名为 .htaccess,因为 Apache 不会读取以原始名称保存的文件。
SSL(Secure Sockets Layer 的缩写,尽管如今发行的每一份证书实际使用的都是 TLS)正是消除地址栏中”不安全”标签的关键。如果你想先了解背景知识,可以阅读什么是 SSL 证书。以下步骤适用于Joomla 5和Joomla 6。
哪种方法适合你的 Joomla 环境
| 你的环境 | 如何获取证书 | 大致耗时 |
|---|---|---|
| 带有 AutoSSL 的托管主机或 cPanel 主机 | 在面板中签发免费证书,然后设置强制 HTTPS | 10 分钟 |
| 没有 SSL 工具的主机,或者你自己的 VPS | 使用 Certbot 获取 Let’s Encrypt 证书,然后设置强制 HTTPS | 20 分钟 |
| 付费证书(OV、EV 或通配符) | 生成 CSR,手动安装,然后设置强制 HTTPS | 30 分钟加上验证时间 |
| 网站前置 Cloudflare | 在源服务器上安装证书,Cloudflare 设置为 Full (strict),并开启 Behind Load Balancer | 15 分钟 |
开始前先做好备份。Akeeba Backup 是 Joomla 上常用的选择。这个过程最糟糕的情况是丢失对自己管理员账户的访问权限,而备份加上下面 configuration.php 部分介绍的恢复步骤能帮你解决这个问题。
Joomla 网站应该使用哪种 SSL 证书?
先从免费选项开始。大多数主机会自动签发免费的 Let’s Encrypt 证书,而免费证书提供的加密强度与付费证书完全相同。不同 Joomla SSL 证书之间的区别在于证书颁发机构在签发之前验证了什么,以及出现问题时你能得到什么保障。
| 类型 | CA 检查的内容 | 签发时间 | 适用场景 |
|---|---|---|---|
| 域名验证(DV) | 确认你控制该域名 | 几分钟 | 博客、宣传网站、大多数 Joomla 安装 |
| 组织验证(OV) | 域名加上你注册的组织信息 | 1 到 3 个工作日 | 企业网站、会员区域、客户门户 |
| 扩展验证(EV) | 对公司进行全面的法律和运营审查 | 1 到 3 个工作日 | 商店、金融机构、任何身份验证至关重要的场景 |
如果你的 Joomla 安装同时提供子域名服务,通配符证书可以用一张证书覆盖所有子域名。不确定该选哪种类型?SSL Wizard 通过几个简单问题就能帮你缩小范围。
在四种情况下,免费证书就不再是最佳选择:你需要在线收款并希望证书能提供保修保障、你需要证书中包含经过验证的组织信息而不仅仅是域名控制权、你运行多个子域名而免费通配符签发在你的主机上操作繁琐,或者你的主机不支持自动续期。最后一点比人们想象的更重要,下一节会解释原因。
将证书安装到服务器上
Joomla 本身不安装证书。这一步是在服务器上完成的,你还完全没有接触到 Joomla。
通过主机面板
在你的控制面板中寻找 SSL/TLS、Let’s Encrypt 或 AutoSSL 选项。在 cPanel 中它位于Security下面。要同时为顶级域名和 www 版本签发证书,否则漏掉的那个版本会提示名称不匹配的警告。
Let’s Encrypt 证书的有效期为90 天,通常会在到期前约 30 天自动续期。当这个自动化流程出现问题时——通常发生在域名迁移或 DNS 更改之后——网站会在数周内正常运行,然后突然变得不安全,且没有任何提前警告。请确认自动续期功能已开启,并在第一个预期续期日期之后使用SSL Checker检查证书状态。如果到期日期已经延后,说明续期功能正常。
在没有面板的 VPS 上
使用 Certbot,即 Let’s Encrypt 客户端。它可以通过命令行签发证书,配置 Apache 或 Nginx,并安装自己的续期计时器。
手动安装付费证书
- 生成 CSR。 Joomla 本身没有生成 CSR 的功能,所以请使用CSR 生成器,或者查看适用于你服务器的CSR 指南。
- 将其提交给证书颁发机构并完成验证。
- 安装证书、私钥和中间证书。 在 cPanel 中这一步是在SSL/TLS > Manage SSL sites中完成的,详见cPanel 安装指南。其他平台请参阅SSL 安装指南。
- 安装完成后先验证,再继续下一步。 运行SSL Checker,如果发现异常,可查看如何检查证书是否安装正确。
不要跳过中间证书。如果只安装主证书而没有安装证书链,大多数桌面浏览器仍然会显示锁形图标,因为它们缓存了在其他地方见过的中间证书。但移动浏览器、支付网关和 API 客户端会验证失败。如果你正在排查证书链问题,请参阅中间证书过期相关内容。
如何在 Joomla 中强制启用 HTTPS
服务器上的证书正常工作后,接下来要告诉 Joomla 使用它。登录管理后台,进入系统 > 全局配置 > 服务器。在该标签页顶部的服务器模块中,你会找到强制 HTTPS选项,它有三种状态,而不是简单的开和关。
- 无。 Joomla 不做任何处理。页面仍可通过 HTTP 和 HTTPS 两种方式访问。
- 仅管理员。 管理后台,包括其登录页面,会被强制使用 HTTPS,而公开网站不受影响。当证书还在验证中,或者你正在分阶段迁移网站时,可以使用这个状态。这样可以立即让你自己的密码不再以明文形式传输,同时不影响访问者所看到的内容。
- 整个网站。 所有内容都会被强制使用 HTTPS。一旦确认证书正常工作,这就是你想要的设置。
选择整个网站并保存。在此之前,请先确认证书在你的域名上能够正常解析。如果在证书损坏或缺失的情况下启用了强制 HTTPS,管理后台也会变得无法访问,届时你需要用到下面介绍的恢复步骤。
以上说明适用于目前支持的两个分支:Joomla 5和Joomla 6。Joomla 6.0 于 2025 年 10 月发布,而 Joomla 5 将于2026 年 10 月 13 日停止接收功能更新,此后仅提供安全补丁,直到 2027 年 10 月为止。如果你仍在使用 Joomla 3,该版本已于 2023 年 8 月停止支持,且相关设置的位置不同,所以在按照本文操作之前请先升级。
通过 configuration.php 设置强制 HTTPS
全局配置中的每一项设置都保存在 Joomla 根目录下的 configuration.php 文件中。当强制 HTTPS 把你锁在管理后台之外时,通过 FTP 编辑该文件正是重新进入后台的方法——这恰恰是下拉菜单已经无法访问的情况。
相关的那一行是:
public $force_ssl = 2;
这些值对应三种状态:0 表示无,1 表示仅管理员,2 表示网站和管理员都强制使用 HTTPS。通过 FTP 将其改回 0 可以在几秒钟内解除锁定状态。
你还会在附近看到另一行:
public $live_site = '';
很多关于 Joomla HTTPS 的教程会告诉你在这里填入你的 https 地址,其中不少还把它写成 var $live_site。这种语法属于 Joomla 1.5,当时使用的是 PHP 4 的类语法,该版本已在 2012 年停止支持。目前的 Joomla 使用 public,而这个设置在官方文档中被标注为可选项。除非你有特定理由需要固定网站 URL,否则请将其留空。它并不是启用 HTTPS 的关键设置,而且设置错误还是导致 Joomla 网站故障的常见原因之一。真正起作用的设置是 $force_ssl。
在 .htaccess 中添加 301 重定向
强制 HTTPS 处理的是已经到达 Joomla 的请求。而在服务器层面设置重定向速度更快,因为它发生在 PHP 运行之前,并且即使 Joomla 离线也依然有效。在 Apache 上,这意味着要用到 .htaccess,而这正是几乎所有教程都遗漏的部分。
首先,重命名 htaccess.txt
Joomla 自带的文件名为 htaccess.txt,而不是 .htaccess。Apache 不会读取以这个名字保存的文件。如果你把重定向规则粘贴进名为 htaccess.txt 的文件,或者粘贴进一个还不存在的 .htaccess 文件,什么都不会发生,也不会有任何错误提示告诉你原因。
- 在你的 Joomla 根目录中将 htaccess.txt 重命名为 .htaccess。不要直接编辑 htaccess.txt 并保留原名:Joomla 更新时会覆盖该文件,你的修改也会随之丢失。
- 在启用全局配置中的 Use URL Rewriting 之前先完成重命名操作。 如果先启用重写功能,Joomla 会开始生成不带 index.php 的 URL,而 Apache 不知道如何路由这些请求,导致除首页外的所有页面都返回 404 错误。
然后添加重定向规则
在 .htaccess 文件顶部附近、Joomla 自身重写规则块的上方添加以下几行:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
有两个细节决定这段代码是否能正常工作。条件必须是 off,意思是”当请求尚未使用安全连接时,进行重定向”。而写成 on(这种错误出现在不少已发布的代码片段中)会导致规则只对已经是 HTTPS 的请求生效,并再次将其重定向到 HTTPS,从而形成死循环。此外,R=301 标志是使其成为永久重定向的关键。如果省略它,或者只写一个不带参数的 R,你得到的将是临时性的 302 重定向,或者是一次内部重写,根本不会告诉搜索引擎任何内容已经迁移。
在 Nginx 上
Nginx 没有 .htaccess 文件,也不会读取 Apache 的重写规则。请改为编辑 server 配置块:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
使用 nginx -t 测试配置,然后用 systemctl reload nginx 重新加载。
切换后需要处理的遗留问题
清除 Joomla 缓存。 这是应该首先要做的事,也是最容易被遗忘的一步。Joomla 会继续提供充满 HTTP 标记内容的缓存页面,这会让已经完成的迁移看起来像是出了问题。前往系统 > 清除缓存,位于维护面板中,如果你使用了 CDN,也要一并清除它的缓存。
修复混合内容问题。 一个通过 HTTPS 提供服务的页面,如果仍以 HTTP 方式加载图片、脚本或样式表,就属于混合内容。浏览器对这两类内容的处理方式不同:媒体资源通常是可升级的,浏览器会悄悄改用 HTTPS 请求它,而脚本和样式表则属于可阻止的,会被直接拒绝加载,这就是为什么受影响的页面有时会完全失去样式。在 Joomla 中,常见的问题来源包括模板覆盖文件中的硬编码 URL、模块设置以及第三方扩展。浏览器控制台会标明出问题的资源。我们关于如何修复混合内容的指南详细介绍了完整的诊断方法。
更新你的站点地图和 robots.txt。 重新生成 XML 站点地图,使其列出 https 网址,并检查 robots.txt 中是否还引用了任何 http 版本的内容。
排查 Joomla SSL 问题
启用强制 HTTPS 后出现重定向次数过多的问题
这是最常见的 Joomla HTTPS 故障,原因是两条标准建议之间存在冲突。如果像 Cloudflare 这样的代理终止了 TLS 连接,然后以普通 HTTP 方式与你的服务器通信,Joomla 就永远不会看到一个 HTTPS 请求。强制 HTTPS 会判断访问者是以不安全方式访问的,并将其重定向到 HTTPS,而代理又以 HTTP 方式再次响应这个请求,如此循环下去,直到浏览器最终放弃并显示 ERR_TOO_MANY_REDIRECTS。
有两种解决方法,通常你需要同时使用两者:
- 将你的 Cloudflare SSL/TLS 加密模式设置为 Full (strict),并在源服务器上保留一份有效证书。而 Flexible 模式——不少热门 Joomla 教程仍将其推荐为快捷的免费方案——恰恰就是导致死循环的原因。
- 将 Behind Load Balancer 切换为 Yes。这个选项位于同一个系统 > 全局配置 > 服务器标签页中,在Proxy模块下方靠后的位置。这会告诉 Joomla 信任代理转发的协议头信息,而不是去检测是否存在直接的 HTTPS 连接。
关于第二个设置需要提醒一点:只有当你的网站确实位于代理、负载均衡器或 CDN 之后时,才应启用Behind Load Balancer。在普通主机环境中,信任任何人都可以发送的转发头信息只会降低安全性,却没有任何好处。
其他常见问题
| 现象 | 原因 | 解决方法 |
|---|---|---|
| 被锁在管理后台之外 | 证书缺失或损坏时启用了强制 HTTPS | 通过 FTP 将 configuration.php 中的 $force_ssl 设为 0,修复证书,然后重新启用 |
| 重定向规则没有任何效果 | 规则写在了 htaccess.txt 中,或者写在了一个尚不存在的 .htaccess 文件中 | 将 htaccess.txt 重命名为 .htaccess |
| 除首页外的所有页面都返回 404 | 在完成重命名之前就启用了 URL Rewriting | 重命名该文件,或者在完成重命名之前先关闭重写功能 |
| 只有部分页面缺少锁形图标 | 这些页面存在混合内容 | 在浏览器控制台中找到该 HTTP 资源 |
| 网站原本正常,几周后突然变得不安全 | Let’s Encrypt 证书因续期失败而过期 | 重新签发证书,然后在你的面板中确认自动续期功能 |
| 在浏览器中正常,但应用或网关访问失败 | 证书链不完整 | 安装完整的 CA 证书包,再用 SSL Checker 重新检查 |
| www 或顶级域名出现名称不匹配 | 证书只覆盖了两者中的其中一个名称 | 重新签发同时覆盖两者的证书。参见通用名称无效 |
如果证书已经安装但网站仍然显示为不安全,SSL 错误指南中提供了针对具体浏览器错误代码的处理方法。
切换完成后:SEO 检查清单
- 在 Google Search Console 中添加 HTTPS 属性。 HTTP 属性不会报告 HTTPS 网址的数据。请添加新的属性,或者使用能同时覆盖两者的域名属性。
- 重新提交站点地图,其中要包含 https 网址。
- 检查规范标签是否在你的 SEF 或 SEO 扩展中指向 https。
- 更新分析工具以及任何存储你网站网址的第三方服务。
要预料到会有一些波动。Google 会把从 HTTP 到 HTTPS 的切换视为一次带网址变更的网站迁移,因此展示次数在一段时间内会分散显示在你的 HTTP 和 HTTPS 两个属性中,排名在稳定下来之前也常常会出现几周的波动。只要每个页面都能正常访问,并且 301 重定向已经配置到位,就没有什么需要额外处理的问题了。
一旦 HTTPS 已经稳定运行一段时间,可以考虑启用HSTS,它会告诉浏览器彻底拒绝对你域名的纯 HTTP 访问。刚开始时先不要启用 preload 指令,因为它一旦生效很难撤销,并且会导致任何仍在使用 HTTP 的子域名无法访问。
常见问题解答
首先通过你的主机面板或手动方式在服务器上安装 SSL 证书。然后登录 Joomla 管理后台,打开系统 > 全局配置 > 服务器,将强制 HTTPS设置为整个网站。Joomla 本身不安装证书,它只是强制使用你服务器上已经安装好的那份证书。
在系统 > 全局配置 > 服务器标签页中,位于顶部的服务器模块里。它提供三种状态:无、仅管理员和整个网站。当证书还在验证过程中时,”仅管理员”这个选项非常有用,因为它可以保护你的登录,同时不改变访问者所看到的内容。
几乎总是因为像 Cloudflare 这样的代理终止了 TLS 连接,并以普通 HTTP 方式转发到你的服务器,导致 Joomla 认为每个请求都是以不安全方式到达的,于是再次进行重定向。请将你的 Cloudflare 加密模式设置为Full (strict),而不是 Flexible,并在全局配置的Proxy模块中将Behind Load Balancer切换为 Yes。只有当你确实处于代理之后时,才应启用这个设置。
不需要。全局配置中的下拉菜单写入的值与文件中保存的值是相同的。编辑configuration.php只在一种情况下有意义:当强制 HTTPS 把你锁在管理后台之外时,你可以通过 FTP 将$force_ssl改回 0。请忽略那些让你填写var $live_site的旧教程。这种语法在 2012 年随 Joomla 1.5 一起被淘汰了,而且这个设置本身也是可选的。
先检查文件名。Joomla 自带的文件名为htaccess.txt,而 Apache 不会读取以这个名字保存的文件,所以粘贴进去的规则永远不会生效。请将其重命名为.htaccess。如果文件名没问题,再检查条件语句:它必须写成 RewriteCond %{HTTPS} off。如果写成”on”,就只会匹配那些已经处于安全连接状态的请求,从而产生重定向死循环,而不是正常的重定向。
适用于目前支持的两个分支:Joomla 5 和 Joomla 6。Joomla 6.0 于 2025 年 10 月发布。Joomla 5 将持续获得功能更新,直到 2026 年 10 月 13 日为止,此后安全补丁将持续提供到 2027 年 10 月。Joomla 3 已于 2023 年 8 月停止支持,且其配置结构与之不同,因此请先升级,再按照本文步骤操作。
正在迁移其他平台,或者想了解通用流程?请参阅我们关于如何将网站从 HTTP 切换到 HTTPS的指南。

