WordPress AJAX请求从HTTPS重定向到HTTP,尝试常见方案仍失败求助
兄弟,我之前也踩过这个AJAX被重定向到HTTP的坑,既然你已经试过加尾部斜杠、指定HTTPS URL,那大概率问题出在后端配置或者脚本本身,给你几个实用的排查方向:
排查AJAX请求被重定向到HTTP的问题
先确认后端是否强制跳转:直接在浏览器地址栏输入完整的HTTPS请求URL(带上参数,比如
https://你的域名/wp-content/plugins/calendarview/views/updateRollOut.php?id=123&start=2024-01-01),看看会不会自动跳转到HTTP地址。如果会,那和前端AJAX代码没关系,问题全在后端。检查服务器配置:
- 如果你用的是Apache,去网站根目录找
.htaccess文件,看看有没有类似下面的错误规则——这种规则会把HTTPS请求强制转成HTTP:
要是有,要么修改规则(改成HTTPS跳转),要么直接删掉这段。RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L] - 要是用Nginx,检查站点的配置文件,看看HTTPS的server块里有没有
return 301 http://$host$request_uri;这类配置,这也会导致强制跳转。
- 如果你用的是Apache,去网站根目录找
检查PHP脚本的跳转逻辑:打开
updateRollOut.php文件,搜一搜有没有header("Location: ...")的代码,是不是硬编码了http://开头的地址?如果是,改成动态获取当前协议就好:// 替换硬编码的HTTP跳转 $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https://" : "http://"; header("Location: " . $protocol . $_SERVER['HTTP_HOST'] . "/你的目标路径");改用WordPress官方AJAX机制(更稳妥):WordPress本身有一套成熟的AJAX处理方案,比直接调用插件里的PHP文件靠谱多了,还能自动适配站点协议:
- 先在插件的主PHP文件里注册AJAX动作:
// 登录用户可访问 add_action('wp_ajax_update_roll_out', 'update_roll_out_callback'); // 未登录用户也可访问(根据需求选择) add_action('wp_ajax_nopriv_update_roll_out', 'update_roll_out_callback'); function update_roll_out_callback() { $id = $_GET['id']; $start = $_GET['start']; // 这里写你的业务处理逻辑 echo "处理后的内容"; wp_die(); // 必须加上,结束输出 } - 前端AJAX代码改成这样:
jQuery.ajax({ url: "https://" + host + "/wp-admin/admin-ajax.php", data: { action: 'update_roll_out', // 和后端注册的动作名一致 id: eventID, start: start }, type: 'GET', success: function(output) { document.getElementById(rollOutDetails).innerHTML = output; } });
- 先在插件的主PHP文件里注册AJAX动作:
最后别忘了清缓存:浏览器有时候会缓存301永久重定向的规则,导致你改了配置还是没效果,测试前先清一下浏览器缓存,或者用无痕模式打开试试。
内容的提问来源于stack exchange,提问作者DMcNeill
相关产品推荐
相关产品推荐

