设置$_SERVER[‘HTTPS’]=‘ON’可阻止访问wp-admin

时间:2016-12-23 作者:nu everest

首先,我的服务器位于负载平衡器后面。我的SSL证书位于负载平衡器上并处理HTTPS。端口443上输入的数据通过端口80上的HTTP转发到Wordpress服务器。

然而,wordpress和php不知道我的服务器配置。这会导致浏览器怀疑我的有效SSL证书的有效性。

为了解决这个问题,我在函数中添加了以下代码。php。我找到了这个code here 以及codex agrees.

/**
 * Make PHP HTTPS aware via HTTP_X_FORWARDED_PROTO
 */
if(isset($_SERVER[\'HTTP_X_FORWARDED_PROTO\']) && $_SERVER[\'HTTP_X_FORWARDED_PROTO\'] == \'https\') {
    $_SERVER[\'HTTPS\']=\'on\';
}
这对前端非常有用,但现在即使使用我的管理员帐户也无法访问/wp admin/。登录后,我收到一条消息:“对不起,您不允许访问此页面。”没有提供其他帮助。

所以我搜索了wp admin文件夹,发现上面写着“对不起,您不允许访问此页面。”出现17次不同的时间。

大多数错误消息都与用户权限检查相关。

如何保持HTTPS“打开”并保留管理员访问权限?

总结:

将HTTP\\U X\\U转发的\\U协议逻辑添加到函数之前。php在向函数添加HTTP\\u X\\u转发的\\u协议逻辑后,我可以访问wp admin。删除HTTP\\u X\\u FORWARDED\\u Protocol to functions后,php I无法访问wp admin。php我无法访问wp admin//li>更新:

我发现错误消息来自wp管理/菜单。php和底部的这段代码。我补充道menu.php 直到错误结束,才能确定是此文件。

if ( !user_can_access_admin_page() ) {

    /**
     * Fires when access to an admin page is denied.
     *
     * @since 2.5.0
     */
    do_action( \'admin_page_access_denied\' );

    wp_die( __( \'Sorry, you are not allowed to access this page. menu.php\'), 403 );
}
我仍然不知道如何解决这个问题。

1 个回复
最合适的回答,由SO网友:nu everest 整理而成

特别感谢用户42826。

根据法典:

如果WordPress托管在提供SSL的反向代理之后,但其本身没有SSL,则这些选项最初会将任何请求发送到无限重定向循环中。为了避免这种情况,您可以配置WordPress来识别HTTP\\u X\\u FORWARDED\\u PROTO标头(假设您已正确配置反向代理来设置该标头)。

以下操作将解决问题。

将此添加到wp config。php。(codex reference)

/* SSL Settings */
define(\'FORCE_SSL_ADMIN\', true);

/* Turn HTTPS \'on\' if HTTP_X_FORWARDED_PROTO matches \'https\' */
if (strpos($_SERVER[\'HTTP_X_FORWARDED_PROTO\'], \'https\') !== false) {
    $_SERVER[\'HTTPS\'] = \'on\';
}
从函数中删除此项。php,因为它是不必要的。

/**
 * Make PHP HTTPS aware via HTTP_X_FORWARDED_PROTO
 */
if(isset($_SERVER[\'HTTP_X_FORWARDED_PROTO\']) && $_SERVER[\'HTTP_X_FORWARDED_PROTO\'] == \'https\') {
    $_SERVER[\'HTTPS\']=\'on\';
}