Typecho 开启 HTTPS 后后台登录重定向循环,通常是因为数据库中的站点地址仍为 HTTP 或反向代理未正确传递协议头。最推荐的处理方向是修正数据库中的 siteUrl 配置并检查 Web 服务器的 SSL 转发设置。
先说结论:解决重定向循环的核心是确保 Typecho 程序识别到的当前协议与浏览器访问协议一致,且数据库存储的站点地址为 HTTPS。
- 先确认:检查数据库 typecho_options 表中 siteUrl 字段是否为 https 开头。
- 先处理:修改 config.inc.php 或数据库强制指定站点 URL 为 HTTPS 地址。
- 再验证:清除浏览器缓存后尝试登录后台,观察地址栏是否稳定在 HTTPS。
命令速用版
如果拥有数据库权限,可直接执行 SQL 语句修正站点地址,这是最直接的止血方案。
UPDATE typecho_options SET value = 'https://你的域名.com' WHERE name = 'siteUrl';
若使用 PHP 配置文件修正,可在 config.inc.php 中添加定义,优先级高于数据库。
define('__TYPECHO_SITE_URL__', 'https://你的域名.com');为什么会这样
重定向循环的根本原因是程序生成的安全令牌 URL 与当前请求协议不匹配,导致验证失败后反复跳转。
Typecho 在生成登录表单 token 或进行后台权限验证时,会读取数据库中的站点地址。如果数据库记录为 HTTP,而服务器强制跳转 HTTPS,程序内部生成的回调地址可能是 HTTP 版本。浏览器收到 HTTP 地址后又被服务器强制转回 HTTPS,形成闭环。此外,若 Typecho 部署在 Nginx 反向代理后,未配置传递 X-Forwarded-Proto 头,程序可能无法识别当前已是 HTTPS 环境。
分步处理
按顺序执行以下操作,每步完成后检查是否仍需继续。
步骤 1:修正数据库站点地址
登录 phpMyAdmin 或使用 MySQL 命令行,查找 typecho_options 表。确认 name 为 siteUrl 的行,将 value 值修改为以 https:// 开头的完整域名。操作完成后无需重启服务,立即生效。
步骤 2:检查配置文件定义
打开网站根目录下的 config.inc.php 文件。检查是否存在 __TYPECHO_SITE_URL__ 定义。若存在且为 HTTP,请修改为 HTTPS;若不存在,可按需添加强制定义以避免数据库读取误差。
步骤 3:配置 Web 服务器协议头
若使用 Nginx 反向代理,需在 server 配置块中添加 proxy_set_header X-Forwarded-Proto $scheme;。若使用 Apache,确保 mod_headers 启用并设置 RequestHeader set X-Forwarded-Proto "https"。这能让 PHP 脚本正确识别 $_SERVER['HTTPS'] 状态。
怎么验证是否生效
验证核心是登录过程不再跳转且地址栏保持 HTTPS。
1. 清除浏览器当前站点的 Cookie 和缓存,关闭隐私模式测试。
2. 访问后台登录页面,输入密码提交。
3. 观察浏览器地址栏,若成功进入后台仪表盘且 URL 始终为 https:// 开头,无闪烁或刷新,即表示修复成功。
4. 检查页面源代码,搜索 form 表单的 action 属性,确认其地址为 HTTPS。
常见坑
1. CDN 配置未开启 HTTPS 回源:若站点接入 CDN,需在 CDN 控制台开启强制 HTTPS 回源,否则源站可能收到 HTTP 请求。
2. 浏览器缓存旧 Cookie:旧 HTTP Cookie 可能干扰新会话,务必在隐私窗口或清除数据后测试。
3. 插件冲突:部分安全类插件可能独立维护 SSL 设置,若上述方法无效,尝试临时禁用所有插件排查。
常见问题
修改数据库后仍然循环跳转怎么办
检查 Web 服务器是否未正确传递 HTTPS 标识给 PHP。
若数据库已修正但问题依旧,通常是 PHP 脚本认为当前仍是 HTTP 请求。检查 Nginx 或 Apache 配置,确保传递了 X-Forwarded-Proto 头,或在 config.inc.php 中强制定义 __TYPECHO_SSL__ 为 true。
前台正常只有后台登录循环
这是安全令牌验证机制导致的特定场景问题。
前台页面通常只读,后台登录涉及 POST 请求和 Token 验证。若 Token 生成时的协议与提交时的协议不一致,验证会失败并重定向。重点检查登录表单 action 地址的协议头。
开启 HTTPS 后图片无法显示
这是混合内容(Mixed Content)问题,与登录循环不同。
检查文章内容和主题文件中是否硬编码了 http:// 开头的资源链接。需将资源地址改为相对路径或 https:// 开头。