如何更新 Wordpress ajaxurl 变量以使用 SSL?
Posted
技术标签:
【中文标题】如何更新 Wordpress ajaxurl 变量以使用 SSL?【英文标题】:How to update Wordpress ajaxurl variable to use SSL? 【发布时间】:2014-11-05 21:57:00 【问题描述】:我们运行 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 时我们都会收到此错误: [blocked] 'https://website.com/users' 处的页面是通过 HTTPS 加载的,但运行来自 'http://website.com/wp-admin/admin-ajax.php' 的不安全内容:此内容也应通过 HTTPS 加载。
【问题讨论】:
有人对此有什么建议吗? 【参考方案1】:ajaxurl
变量从admin_url() 函数获取其值,该函数又根据is_ssl() 函数的结果确定是否执行https
。
因此,基本上,如果您的ajaxurl
中没有得到https
,则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
中链接的gist
以获取is_ssl()
文档。你应该把它添加到你的插件目录中。
【讨论】:
【参考方案2】:我在使用 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 调用阻止了许多插件的功能。
【讨论】:
以上是关于如何更新 Wordpress ajaxurl 变量以使用 SSL?的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress:在没有插件的情况下集成 Mailchimp 错误请求 400 Ajax URL