NGINX + PHP,$_POST数据经过nginx后为空

NGINX + PHP,$_POST数据经过nginx后为空

问题是这样的,当我尝试使用 NGINX (1.18) 和 PHP (7.4.3) 与 FPM (APT 最新版本) 时,我遇到了一个问题,即脚本中的所有 POST 数据都返回为 null

$_POST['name'];
// console after post: name is undefined

我也尝试发布的 URL:

/posts/new/post

(the user goes on /posts/new to make a new post, the $_POST request goes to /posts/new/posts)

这是我的 nginx 配置:

server {
        root /forum/;
        index index.php;
        server_name ***.net;
        location / {
                try_files $uri $uri/ =404;
        }
        location /posts/ {
                    try_files $uri $uri/ @rewrites;
        }
        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }
        location @rewrites {
         rewrite ^/posts/(?<id>[a-zA-Z0-9]+)$ /posts/?post=$id;
        }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/***.net/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/***.net/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

当我构建这些脚本时,它们在内置的 PHP 测试服务器上运行良好。

另请注意:此服务器位于代理后面,但这是在代理后面测试的(转到 192.168.xx)

编辑:我还忘了说明 $_POST 是通过 Jquery 的 $.ajax 进行 XMLHTTP 发布。

编辑 2:查看通过脚本发送的标头(在 FPM 上)时,没有发送帖子数据,但使用测试服务器时,会发送帖子数据

答案1

经过大约 2 小时的无用搜索,一个简单的修复:更改

        location / {
                try_files $uri $uri/ =404;
        }

        location / {
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }

导致此问题的原因:

当针对索引/(不带/index.php)运行查询时,查询未传递到/index.php,因此全部$_POST返回为NULL

相关内容