我最近有一个网站100%支持HTTPS。前端和后端的所有资产都通过HTTPS成功调用,除了admin ajax。php。
这会导致任何依赖于文件的功能失败,包括但不限于CF7、Elementor和其他使用AJAX提交的表单等。
我得到的错误,你可以在截图中看到是“混合内容:页面位于”https://toursoft.co/contact-us/\' 已通过HTTPS加载,但请求了不安全的XMLHttpRequest终结点\'http://toursoft.co/wp-admin/admin-ajax.php\'. 此请求已被阻止;内容必须通过HTTPS提供。“”
以下是我迄今为止为解决这个问题所做的努力。
1) 尽一切努力https://codex.wordpress.org/Administration_Over_SSL 包括define(\'FORCE\\u SSL\\u ADMIN\',true)。尽管它们正在加载wp-admin/admin-ajax。php文件,这是从前端发生的。
2) 在我的apache配置中添加了以下内容:
SetEnvIf X-Forwarded-Proto https HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
3)使用wp cli执行完整的搜索和替换
sudo -u www-data wp search-replace \'http://toursoft.co\' \'https://toursoft.co\' --network
这替换了151项,甚至在GUID列中也是如此,Wordpress强烈建议不要这样做。但它没有起作用。数据库中保留了0个http://
4) 已验证site\\u url和home选项是否正确指向https://
调查导致错误的javascript代码表明,代码似乎正确地调用了“ajaxUrl”变量。这个变量应该保存文件的https://version,对吗?
jQuery.ajax({
url: t.getSettings("ajaxUrl"),
type: "POST",
dataType: "json",
data: t.getFormData(),
processData: !1,
contentType: !1,
success: t.onSuccess,
error: t.onError
})
The
ajaxUrl
变量仅返回脚本的http版本。否则,我如何调查并最终修复它,以便通过https加载?