我试图访问$_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
有什么问题?
感谢。
答案 0 :(得分:1)
此不同行为的关键是路径中的尾部斜杠。
对于nginx,以下是两个不同的请求:
http://localhost/foo
http://localhost/foo/
第一个导致内部301重定向(到index.php到该文件夹),其中$ _POST值丢失。
有关此行为和防止它的解决方案的更多信息,请阅读以下答案: Nginx causes 301 redirect if there's no trailing slash
答案 1 :(得分:0)
我刚刚发现,如果使用此标头发送请求并且您的服务器不安全,则会发生这种情况:
Upgrade-Insecure-Requests: 1