问题是这样的,当我尝试使用 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