Cloudflare Flexible SSL下WordPress HTTPS配置问题求助
这个问题我之前帮不少开发者踩过坑,核心矛盾就是Cloudflare Flexible SSL的反向代理机制和WordPress的协议检测逻辑没对上,咱们一步步拆解解决:
首先说无限循环:Flexible SSL的特性是用户→Cloudflare是HTTPS加密,但Cloudflare→你的服务器是HTTP明文。当你把wp_options里的siteurl和home改成HTTPS后,WordPress在服务器端检测到当前请求是HTTP,就会自动触发重定向到HTTPS;但Cloudflare收到HTTPS请求后又转成HTTP发给服务器,一来一回就形成了死循环。
而混合内容错误,则是因为你安装WordPress时用的是HTTP,数据库、主题、插件里大量资源(图片、脚本、样式)的链接还是HTTP,浏览器加载HTTPS页面时会拦截这些不安全的HTTP资源,导致功能异常。
1. 先搞定/wp-admin的无限循环
要让WordPress“明白”:虽然服务器收到的是HTTP,但用户实际用的是HTTPS访问。打开你的wp-config.php文件,在/* That's all, stop editing! Happy publishing. */这行之前添加以下代码:
// 强制后台管理页面使用HTTPS define('FORCE_SSL_ADMIN', true); // 识别Cloudflare反向代理传递的HTTPS标识 if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; }
这段代码会让WordPress读取Cloudflare发送的X-Forwarded-Proto请求头,判断用户实际使用的是HTTPS,从而停止不必要的重定向。
2. 彻底清理混合内容
只改siteurl和home远远不够,数据库里还有大量旧的HTTP链接需要替换:
- 方法一:用SQL命令批量替换(适合熟悉数据库操作的用户)
打开phpMyAdmin或你的数据库管理工具,执行以下SQL语句(记得把yourdomain.com换成你的实际域名,wp_换成你的数据库表前缀):-- 替换文章内容里的HTTP链接 UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://yourdomain.com', 'https://yourdomain.com'); -- 替换自定义字段里的HTTP链接 UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://yourdomain.com', 'https://yourdomain.com'); -- 替换系统设置里的HTTP链接(包括菜单、主题配置等) UPDATE wp_options SET option_value = REPLACE(option_value, 'http://yourdomain.com', 'https://yourdomain.com') WHERE option_name IN ('home', 'siteurl', 'widget_text', 'theme_mods_yourthemename'); - 方法二:用插件替换(更安全,适合新手)
安装并激活Better Search Replace插件,在插件设置页面:- 搜索内容填
http://yourdomain.com - 替换内容填
https://yourdomain.com - 勾选所有数据库表,点击「Run Search/Replace」。操作前一定要备份数据库!
- 搜索内容填
3. 检查主题和插件的硬编码链接
有些主题或插件可能会在代码里硬写HTTP链接(比如主题的functions.php、自定义模板、插件配置文件),需要手动排查并替换成HTTPS,或者改用相对路径(比如把http://yourdomain.com/wp-content/xxx改成/wp-content/xxx)。
4. 重新启用Cloudflare的强制HTTPS规则
确保你的页面规则覆盖整个域名,比如规则匹配*yourdomain.com/*,然后开启「始终使用HTTPS」选项。这样所有HTTP请求都会被Cloudflare自动重定向到HTTPS。
完成所有步骤后,清除浏览器缓存,访问你的网站和/wp-admin,应该就能正常使用HTTPS,不会再出现循环和混合内容错误了。
内容的提问来源于stack exchange,提问作者Kyle Hawk

