我们运行Wordpress 4.0 / Buddypress设置,自从我们切换到SSL后,所有ajax函数都无法正常工作,因为ajaxurl变量仍在读取“http”。
<script type="text/javascript">
/* <![CDATA[ */
var ajaxurl = 'http://website.com/wp-admin/admin-ajax.php';
/* ]]> */
</script>
此代码会自动添加到wp_head中,因此我们不确定如何更新它。我们只需要将http切换为https。
有谁知道我们如何做到这一点?
我们每次需要ajax时都会收到此错误: [已屏蔽]“https://website.com/users”页面是通过HTTPS加载的,但是运行了来自“{{3”的不安全内容}:'此内容也应通过HTTPS加载。
答案 0 :(得分:3)
ajaxurl
变量从admin_url()函数获取其值,该函数反过来根据is_ssl()函数的结果确定是否执行https
。
因此,基本上,如果您的https
未获得ajaxurl
,则is_ssl()
功能无法正确检测您网站上的SSL。
如果您支持负载均衡器或支持HTTP_X_FORWARDED_PROTO
的反向代理(如ELB),请根据文档将以下内容添加到wp-config.php
:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';
如果这不起作用,请查看gist
文档中is_ssl()
链接的{{1}}。您应该将它添加到您的插件目录。
答案 1 :(得分:1)
我也有Wordpress的这个问题,特别是因为我使用CloudFlare Flexible SSL。
我在/wp-includes/load.php
上做了这个快速而又脏的补丁function is_ssl() {
if ( isset( $_SERVER['HTTP_CF_VISITOR'] ) ) {
if ( strpos($_SERVER['HTTP_CF_VISITOR'], "https") !== "false" ){
return true;
}
}
if ( isset( $_SERVER['HTTPS'] ) ) {
if ( 'on' == strtolower( $_SERVER['HTTPS'] ) ) {
return true;
}
if ( '1' == $_SERVER['HTTPS'] ) {
return true;
}
} elseif ( isset($_SERVER['SERVER_PORT'] ) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
return true;
}
return false;
}
这有助于管理员调用阻止大量插件功能的ajax调用。