我正在尝试访问$_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。一旦我做到了——它就奏效了。