php - Wordpress:服务器迁移后/wp-admin 权限被拒绝
问题描述
我目前正在尝试将我的多站点 wordpress 安装从 ionos 迁移到 aws。
在 ionos 上,我有一个带有 plesk、nginx、apache、php 7.2.28、letsencrypt 和 mariadb 的 ubuntu 服务器。
在 AWS 上,我有一个 ELB(进行 ssl 终止)、一个带有 apache / php 7.2.34 / wordpress 的 amazon linux 2(基于 centos)实例和另一个 mariadb 实例。
我从生产环境中提取了一个数据库转储,并在这个新环境(与生产环境相同的域,通过修改/etc/hosts
文件在本地访问)上恢复它(原样)。
我从生产中复制了我们的 wordpress 代码库,修改了 apache 配置文件以适应新的文件夹结构,并修改了 wp-config 以访问新的数据库实例并停止强制 ssl 重定向。
登陆页面有效,我可以访问网站和公共页面,但是当我尝试登录时,它显示权限被拒绝(“对不起,您无权访问此页面。”)。
似乎身份验证有效,因为我可以在主页顶部看到管理栏。当我尝试访问 wp-admin 中的页面时,出现上述错误。
在调试代码时,我发现从 function 访问全局 $current_user 的 ID 为 0 user_can_access_admin_page
。
以下是尝试访问https://mydomain.tld/wp-admin/widgets.php页面的调试详细信息:
- menu.php(https://github.com/WordPress/WordPress/blob/master/wp-admin/includes/menu.php#L350)抛出错误,因为
user_can_access_admin_page
返回false。 - 在
user_can_access_admin_page
函数内部(https://github.com/WordPress/WordPress/blob/efaa79d347fbac1f9c4d1bc0494ec809b43e7042/wp-admin/includes/plugin.php#L2094), current_user_can 函数被调用,它本身调用wp_get_current_user
试图检索用户的函数来自全局变量 $current_user。 - 不幸的是,这个变量不包含关于我当前用户的详细信息($current_user->ID 设置为 0,就好像我没有登录一样)。在主页上,我可以在页面顶部看到带有我的用户名的管理栏(这意味着我确实已登录)。
奇怪的是它适用于生产,我无法理解这两种环境之间有什么不同。就像我说的,DB 完全一样,代码库是一样的,我所做的唯一更改是在 wp-config 底部添加以下代码以正确处理 ssl 终止
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';
phpinfo()
表明两台服务器都安装了相同的库。
我认为问题可能是由于 wp-config 中的密钥/盐与用于存储加密密码的密钥/盐不同,但它们与生产中的密钥/盐相同。
如果初始化钩子没有完成,我已经阅读了全局 $current_user 可以为 0,但我怀疑是这种情况:
- 它适用于生产
- 这是 wordpress 标准代码库的一部分
我已经在数据库中检查了我的用户的权限:它是超级管理员,具有管理网络功能的 10 级(就像我说的,它与 prod 是同一个数据库,它工作正常)
我检查了文件/文件夹权限,它们看起来很好。
解决方案
WordPress 使用 cookie 进行身份验证。因此,请先检查管理页面的 URL。然后先双重确认http|https和域名。
推荐阅读
- c++ - 将初始化列表传递给 C++ 中的数组成员
- excel - 将 CSV 文件导入 Excel 文件
- r - 使用“调整”平滑密度图
- python-3.x - 当我尝试从 IP 摄像机捕获视频时,我正在进行活动检测,它显示错误
- vue.js - Vue.JS @click 活动样式在 @click 不同组件后失效
- r - 将命名向量添加到 R 中的向量列表中
- sqlplus - 退出 SQL*Plus 脚本而不退出 SQL*Plus
- java - 限制和冻结按钮不起作用,也没有产生新球(动画)
- android - 使用 Intent.FLAG_ACTIVITY_MULTIPLE_TASK
- python-3.x - RuntimeError:您必须在使用模型之前对其进行编译