WordPress site_url()返回http与数据库https配置不符引发重定向及后台问题
WordPress 多重定向及后台访问权限问题解决方案
站点URL协议不匹配根因
数据库存储的站点URL为HTTPS但site_url()返回HTTP,本质是站点部署了反向代理/CDN/负载均衡设备,用户端以HTTPS协议访问代理节点,代理节点以HTTP协议转发请求到后端WordPress服务,WordPress默认通过当前请求的协议判断生成站点URL,因此会返回HTTP协议的地址,触发多重定向循环。
$_SERVER['HTTPS'] = 'on'配置的合规性说明
该操作完全合规,WordPress核心就是通过$_SERVER['HTTPS']全局变量判断当前请求是否为HTTPS协议,手动赋值为on相当于明确告知WordPress当前请求为HTTPS,所有生成的站点URL都会自动适配HTTPS协议。
但不建议写在主题functions.php中,主题更新时该文件会被覆盖,导致配置失效。最优方案是将配置写入wp-config.php,更规范的写法是适配反向代理传参,避免本地开发环境异常:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; }
同时可在wp-config.php中固定站点URL,优先级高于数据库配置:
define( 'WP_HOME', 'https://dev.mydomain.com' ); define( 'WP_SITEURL', 'https://dev.mydomain.com' );
以上配置需放在wp-config.php文件中/* 好了!请不要再继续编辑。请保存本文件。使用愉快! */注释之前。
后台无权限访问问题排查步骤
- 清除所有缓存:包括浏览器缓存、CDN缓存、Divi主题内置缓存、缓存插件缓存、Redis/Memcached等对象缓存,多数权限报错由旧的会话/权限缓存导致。
- 核对数据库用户权限:进入数据库对应的
[表前缀]_usermeta表,找到对应用户ID的[表前缀]_capabilities字段,确保字段值为a:1:{s:13:"administrator";b:1;},站点URL变更后可能出现表前缀匹配异常导致权限失效。 - 临时禁用主题与插件:将
functions.php中新增的HTTPS配置移到wp-config.php后,重命名当前Divi主题文件夹临时切换为WordPress默认主题,再重命名wp-content/plugins目录为plugins.bak,测试是否可进入后台,若可访问则逐一恢复排查冲突的主题/插件。 - 重置
.htaccess规则:删除.htaccess文件中除默认WordPress规则外的自定义重定向规则,默认规则如下:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
内容的提问来源于stack exchange,提问作者Jon Daveyan
相关产品推荐
相关产品推荐

