【问题标题】:Ajax not working on Nginx / WordpressAjax 不适用于 Nginx / Wordpress
【发布时间】:2025-12-15 10:40:01
【问题描述】:

喂,

我在 nginx 上运行 wordpress 3x,我所有的 ajax 调用都被破坏了。完全相同的 wordpress 在 Apache 上运行良好。

我已通过从所有 jquery.post() 调用中删除“index.php”以某种方式修复了与 nginx 一起使用的 ajax 调用,但我无法以相同的方式修复其他调用。

基本上这些变化是: 对于 nginx 行:

jQuery.post( 'index.php?ajax=true', form_values, function(returned_data) {

被替换为:

jQuery.post( '?ajax=true', form_values, function(returned_data) {

我怀疑问题出在带有重写规则的 nginx 配置文件中。你在我的配置里

if (!-e $request_filename) {
rewrite ^.+/?(/wp-.*) $1 last;
rewrite ^.+/?(/.*\.php)$ $1 last;
rewrite ^(.+)$ /index.php?q=$1 last;
}


location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /xxx/public$fastcgi_script_name;
include fastcgi_params;
}
}

【问题讨论】:

    标签: ajax wordpress nginx


    【解决方案1】:

    会不会是你在浏览器 URL 中的目录或“虚拟”目录中?

    例如,如果您在 www.myblog.com,这应该可以工作,但在 www.myblog.com/my-category/my-post/ 上可能不会。

    您是否从 Apache 站点和 Nginx 站点上完全相同的 URL 位置进行了测试?

    您是否尝试在路径前加上斜杠以确保它是被调用的根脚本?

    jQuery.post( '/index.php?ajax=true', form_values, function(returned_data) {
    

    【讨论】:

    • “您是否从 Apache 站点和 Nginx 站点上完全相同的 URL 位置进行了测试?”是的,我测试了完全相同的应用程序和网址。我的 URL 总是类似于 www.blog.com/post-name。我没有尝试使用“/index.php?ajax=true”,而是使用“?ajax=true”并在一个案例中工作,在所有其他情况下都没有工作。
    • 我建议您尝试在 index.php 之前放置一个前导斜杠,因为它会将操作定向到站点的根 index.php 文件。无论您运行的是 Nginx 还是 Apache,它都应该可以工作。
    • 另一个提示是在使用 Firefox 时运行 Ajax 脚本并激活 Firebug 控制台。然后,您可以看到 Ajax 调用已完成以及从中获得了什么结果。您很可能会收到 404 错误。