You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx中如何阻止404 POST请求被转换为GET请求?

Nginx中如何阻止404 POST请求被转换为GET请求?

嘿,这个问题我之前踩过坑!根源在于Nginx默认处理error_page触发的内部跳转时,会把POST这类非GET请求强制转换成GET请求,所以你才会在PHP里看到$_SERVER['REQUEST_METHOD']变成GET,$_POST也空得离谱。

给你两种解决方案,选哪种看你需求:

方案一:直接修改try_files(推荐)

你现在location /块里的try_files $uri $uri/ =404;会先返回404状态码,再通过error_page跳转到index.php,这个跳转过程就是请求方法被篡改的原因。

不如直接把它改成:

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to index.php
    try_files $uri $uri/ /index.php;
}

这样当Nginx找不到对应文件或目录时,会直接内部转发到/index.php,这种转发会完整保留原始的请求方法(包括POST),你的PHP代码就能正常拿到POST数据和正确的请求方法了。

方案二:调整error_page的写法

如果你不想改动try_files的逻辑,那可以修改error_page的语法,让它保留原始请求方法。把原来的:

error_page 404 = /index.php;

改成:

error_page 404 =404 /index.php;

这里的=404表示跳转后仍然返回404状态码,同时Nginx会把这个请求当作代理转发而非重定向,从而保留原始请求方法。如果你需要PHP页面返回200状态码,也可以改成=200 /index.php;,根据你的业务需求调整就行。

备注:内容来源于stack exchange,提问作者hanshenrik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:39:51