如何更新 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

如何在Wordpress中更新新密码之前从db验证旧密码

WordPress 和 Ajax - 重新加载短代码内容

如何在 ajax URL 路由中添加变量

替换WordPress插件中的硬编码JavaScript字符串

如何阻止WordPress插件更新?