首页 > 解决方案 > 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页面的调试详细信息:

奇怪的是它适用于生产,我无法理解这两种环境之间有什么不同。就像我说的,DB 完全一样,代码库是一样的,我所做的唯一更改是在 wp-config 底部添加以下代码以正确处理 ssl 终止

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
       $_SERVER['HTTPS']='on';

phpinfo()表明两台服务器都安装了相同的库。
我认为问题可能是由于 wp-config 中的密钥/盐与用于存储加密密码的密钥/盐不同,但它们与生产中的密钥/盐相同。
如果初始化钩子没有完成,我已经阅读了全局 $current_user 可以为 0,但我怀疑是这种情况:

我已经在数据库中检查了我的用户的权限:它是超级管理员,具有管理网络功能的 10 级(就像我说的,它与 prod 是同一个数据库,它工作正常)

我检查了文件/文件夹权限,它们看起来很好。

标签: phpwordpressamazon-web-services

解决方案


WordPress 使用 cookie 进行身份验证。因此,请先检查管理页面的 URL。然后先双重确认http|https和域名。


推荐阅读