我目前正在尝试将我的多站点wordpress安装从ionos迁移到aws
在ionos上,我有一个带有plesk、nginx、apache、php7.2.28、letsencrypt和mariadb的ubuntu服务器
在AWS上,我有一个ELB(执行ssl终止(,一个使用apache/php7.2.34/wordpress的amazon-linux2(基于centos(实例,以及另一个用于mariadb的实例
我从生产环境中获取了一个DB转储,并在这个新环境中(与生产环境相同的域,通过修改/etc/hosts
文件在本地访问(将其恢复(未受影响(
我从生产中复制了我们的wordpress代码库,修改了apache配置文件以适应新的文件夹结构,并修改了wp-config以访问新的DB实例并停止强制ssl重定向
登录页有效,我可以访问网站和公共页面,但当我尝试登录时,它显示权限被拒绝("对不起,您不允许访问此页面。"(。
似乎验证有效,因为我可以看到主页顶部的管理栏。当我试图访问wp管理员内部的页面时,我会出现上述错误
在调试代码时,我发现从函数user_can_access_admin_page
访问全局$current_user时,其ID为0。
以下是尝试访问https://mydomain.tld/wp-admin/widgets.php页码:
- 错误由menu.php引发(https://github.com/WordPress/WordPress/blob/master/wp-admin/includes/menu.php#L350)因为CCD_ 3返回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配置中的密钥/salt与用于存储加密密码的密钥/sat不同,但它们与生产中的密钥相同
我已经读到,如果init钩子没有完成,全局$current_user可能为0,但我怀疑情况是否如此:
- 它在生产中起作用
- 这是wordpress标准代码库的一部分
我已经在DB中检查了我的用户的权限:它是一个超级管理员,具有管理网络功能的级别10(正如我所说,它与prod是同一个DB,在那里它工作得很好(
我检查了文件/文件夹权限,它们看起来很好。
WordPress使用cookie进行身份验证。因此,请先检查管理页面的URL。然后先确认http|https和域名。