$_POST is empty. Nginx OSx


$_POST is empty. Nginx OSx

我正在尝试访问$_POST,但它是空的。

如果我尝试在根目录(即localhost)上访问它,它会起作用。如果我尝试访问其他文件夹(即localhost/foo),它不会起作用。

这是我的配置文件:

 server {
        listen   80;    
        root /var/www;
        index index.php index.html index.htm;
        server_name localhost;
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
              root /usr/share/nginx/www;
        }
        # pass the PHP scripts to FastCGI server listening on the php-fpm socket
        location ~ '.php {
                try_files $uri =404;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

以下是RAW请求示例:

POST /dev/post-test HTTP/1.1
Host: localhost
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="action"
store
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="id"
4315251
----WebKitFormBoundaryE19zNvXGzXaLvS5C

问题出在哪里?

谢谢。

这种不同行为的关键是路由中的尾部斜杠。

对于nginx,以下是两个不同的请求:

http://localhost/foo
http://localhost/foo/

第一个导致内部301重定向(到该文件夹的index.php),其中$_POST值丢失。

有关这种行为的更多信息和防止这种行为的解决方案,请阅读以下答案:Nginx导致301重定向,如果存在';s无尾斜线

我遇到了同样的问题-空的$_POST变量。

发现如果用这个头发送请求,并且目的地是http而不是https:,就会发生这种情况

Upgrade-Insecure-Requests: 1

在我的情况下,我从我的Unity游戏发送请求到它的服务器。事实证明,Unity在游戏发出的所有请求中都添加了这个标题。

因此,我不得不为服务器域启用SSL,并从http切换到https。一旦我做到了——它就奏效了。