论坛上 HTTPS 只需三步:用宝塔面板申请 Let's Encrypt 免费证书(有效期 90 天、自动续签)→ 打开强制 HTTPS 或加一条 301 跳转 → 回到后台「基本设置」把站点地址改成 https:// 开头的主域名并保存。漏掉第三步是 90% 的「换 HTTPS 后登录掉线、发帖提示页面已过期」的根因。
免费证书怎么申请?推荐 Let's Encrypt 一键签发
结论:宝塔、aaPanel 等主流面板都内置 Let's Encrypt 免费签发,全程点选,不需要命令行、不需要 Composer,签发到生效通常 1-2 分钟。
步骤:进入宝塔「网站 → 你的站点 → SSL → Let's Encrypt」,勾选要签的域名(建议同时勾 bbs.example.com 和 www.bbs.example.com,避免后续跳转链路断掉),验证方式选「文件验证」(80 端口必须对外开放,CDN 用户需先回源),点申请,成功后开启「强制 HTTPS」,面板会自动写入 Nginx 配置。
证书有效期是 90 天,宝塔默认在到期前 30 天自动续签;只要 80 端口长期开着、站点根目录可写,续签基本不会失败。如果你用 CDN(腾讯云、阿里云、Cloudflare),源站证书和边缘证书是两回事,边缘也要单独上传或开启「自动 HTTPS」。
强制跳转怎么写?一条 301 解决,别写 302
结论:强制跳转用 301 永久重定向,配置只有一行,写在 80 端口的 server 块里,不要在每个页面里用 PHP 判断。
Nginx 写法:
server {
listen 80;
server_name bbs.example.com www.bbs.example.com;
return 301 https://bbs.example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name bbs.example.com www.bbs.example.com;
# ssl_certificate ... 由面板自动写入
root /www/wwwroot/bbs;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string; # 伪静态只需这一条
}
}
Apache 环境则在 .htaccess 里加:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
注意点:只保留一跳跳转。同时写「80 跳 443 + www 跳裸域」会形成两跳,搜索引擎和 AI 爬虫抓取时会多消耗一次请求;把 www 和裸域统一写进同一条 return 301 更干净。HSTS(Strict-Transport-Security: max-age=31536000)能强制浏览器只用 HTTPS,但一旦开启且带 includeSubDomains,子域没证书就会整片打不开,建议先跑通 1-2 周再开,且不要急着加 preload。
换成 HTTPS 后为什么登录掉线、提示「页面已过期」?
结论:这不是证书问题,是后台站点地址还是 http 导致的会话 Cookie 与 CSRF 校验域不一致。
Clara BBS 全站带 CSRF 防护,token 与会话域绑定。如果后台「基本设置」里站点地址填的是 http:// 或没写 www 与 https,浏览器会在 http 与 https 之间反复切域,会话丢失,于是出现「页面已过期,请刷新后重试」。新编辑器内置了自动重试(拉一次新 token 重发),但根本解法是改地址。
操作:后台「系统设置 → 基本设置」把站点地址改为 https://bbs.example.com(必须带 https://,且与证书主域名完全一致,不要一会儿 www 一会儿裸域),保存即生效,无需清缓存。改完让老用户退出重新登录一次即可。
混合内容(Mixed Content)怎么排查?
结论:HTTPS 页面里只要还有一个 http:// 的图片、表情或附件链接,浏览器地址栏就不会显示完整的小锁。
Clara BBS 上传的图片、附件默认走站内相对路径,同域升级 HTTPS 后基本不会出问题;风险点集中在两处:一是外链图床或网盘图片,二是开启了云存储但回源地址填了 http://。排查方法是打开 F12 控制台,看 Console 里的 Mixed Content 警告,或按 Ctrl+F 在页面源码里搜 http://。云存储设置改成 https:// 的访问域名即可。
顺带检查一下上传上限:PHP 的 upload_max_filesize 与 post_max_size 建议调到 30M 以上(宝塔默认 2M,手机照片常超),改完重载 PHP,否则上传会报「超过 PHP 上限」。
HTTPS 部署完成后必查的 5 项
- 浏览器地址栏出现完整小锁,点击证书能正常显示域名与有效期;
- 输入
http:// 域名访问,只跳一次就落到 https://;
- 登录、发帖、上传各走一遍,不再出现「页面已过期」;
https://你的域名/robots.txt、/llms.txt、/answers.html 均返回 200 —— 这几个是 GEO 输出入口,AI 爬虫抓取时要能直连 HTTPS,301 虽可跟随但没必要多一跳;
- 后台「系统工具 → 计划任务」里 GEO 健康体检与 IndexNow 推送正常,如果推送的 URL 还是 http,说明站点地址没改干净。
收束一下:免费证书用宝塔 Let's Encrypt 一键签,90 天自动续;强制跳转只写一条 301,别造成多跳;真正的坑在后台站点地址必须同步改成 https:// 主域名,否则会话与 CSRF 域不匹配会持续掉登录。三件事按顺序做完,HTTPS 对 Clara BBS 就是零成本的常规升级。