为解决此问题,我在functions.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';
}
这对前端非常有用,但是现在即使使用我的Admin帐户也无法访问/ wp-admin /。登录后,我收到一条消息,“抱歉,不允许您访问此页面。”没有提供其他帮助。
因此,我在wp-admin文件夹中进行了搜索,发现“抱歉,不允许您访问此页面”。会在17个不同的时间出现。
大多数错误消息都与用户权限检查相关。
如何使HTTPS保持打开状态并保留管理员访问权限?
摘要:
向功能添加HTTP_X_FORWARDED_PROTO逻辑之前。 php我可以在函数中添加HTTP_X_FORWARDED_PROTO逻辑后访问wp-admin /
。php我在函数中删除HTTP_X_FORWARDED_PROTO逻辑后不能访问wp-admin /
。
更新:
我发现错误消息来自wp-admin / menu.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 楼
特别感谢user42826。根据编解码器:
如果WordPress托管在提供SSL的反向代理的后面,但是托管在没有SSL的自身之上,则这些选项将首先发送任何内容请求进入无限重定向循环。为避免这种情况,您可以配置WordPress以识别HTTP_X_FORWARDED_PROTO标头(假设您已经正确配置了反向代理来设置标头)。
以下操作将解决此问题。
将其添加到wp-config.php。 (编解码器参考)
/* 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';
}
从不必要的功能中删除此函数。
/**
* 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';
}
评论
原因是安全会话cookie在负载均衡器后面时会丢失,因为LB正在使用SSL,但后端是纯http。很高兴看到其他人在企业级架构上工作;)
–user42826
16 Dec 24'3:02
@ user42826这种设置的好处是,如果我想禁止管理员访问,可以将FORCE_SSL_ADMIN注释掉,或者是否有其他副作用使我重新考虑这种思路?
–nu珠穆朗玛峰
16 Dec 24 '15:32
在您的设置中,听起来好像没有设置FORCE_SSL_ADMIN会阻止管理员访问,但是根据您的要求,有更好的方法来执行此操作。示例:阻止在.htaccess或apache配置中访问wp-admin或wp-login.php,通过插件删除WP本机身份验证,重新架构WP,以使wp-admin URL与公共URL不同,等等。
–user42826
16 Dec 25 '18:42
确保将此代码添加到require_once(ABSPATH。'wp-settings.php');之前;线。特别感谢jtl在这个答案中。
– Aaroninus
17年9月14日在16:02
@Aaroninus谢谢,我使用Cloudflare flexible SSL,如果没有您的评论,我会花时间再次搜索。我之前发现了这个相关问题:wordpress.stackexchange.com/questions/170165/…
–baptx
17/12/21在12:33
评论
您无需对配置的其余部分说太多。您是否设置了define('FORCE_SSL_ADMIN',true);我没有定义“ FORCE_SSL_ADMIN”。我会尝试的。
您需要检查是否也通过HTTP从负载均衡器发送了https cookie。听起来好像没有发送。显然,还需要检查另一种方法,即您设置的cookie是否通过https传输。