IIS环境下PHP的$_POST无数据问题求助
解决IIS下ASP.NET应用中WordPress无法获取POST参数的问题
排查IIS请求筛选与重写规则
- 检查IIS站点的请求筛选:进入请求筛选面板,确认“HTTP谓词”列表里包含POST;再到“请求限制”中,把
最大允许内容长度设为大于post_max_size的数值(比如134217728对应128M),避免请求体被截断。 - 暂停所有自定义URL重写规则,有些ASP.NET的重写规则会意外修改POST请求的结构,甚至清空请求体,测试禁用后是否恢复正常。
调整FastCGI处理程序配置
- 编辑PHP的FastCGI处理程序映射,在“请求限制”里确认“允许的谓词”包含POST;
- 添加FastCGI环境变量
CGI_PASS_AUTH并设为1,这个变量能解决部分IIS环境下FastCGI无法正确传递POST数据的问题;同时检查是否存在REDIRECT_STATUS这类可能干扰的变量,如有则暂时移除。
隔离ASP.NET与PHP的运行环境
- 若站点应用程序池用的是集成模式,切换为经典模式测试。集成模式下IIS的管道处理逻辑可能和FastCGI的POST数据传递机制冲突;
- 如果WordPress所在子目录被设为独立应用,确保其应用程序池设置为
No Managed Code,避免ASP.NET模块干扰PHP请求的处理流程。
排查PHP配置与扩展冲突
- 在php.ini中设置
auto_globals_jit = Off,虽然enable_post_data_reading开启,但auto_globals_jit在IIS场景下可能导致$_POST无法正常初始化,修改后重启IIS; - 临时禁用所有非核心PHP扩展(如缓存、安全类扩展),部分第三方扩展会拦截或修改POST请求数据,测试禁用后是否恢复。
用极简脚本定位问题
- 在WordPress目录创建
test_post.php,内容如下:
<?php echo "请求方法: " . $_SERVER['REQUEST_METHOD'] . "<br>"; echo "内容长度: " . $_SERVER['CONTENT_LENGTH'] . "<br>"; echo "内容类型: " . $_SERVER['CONTENT_TYPE'] . "<br>"; echo "php://input 内容: " . file_get_contents('php://input') . "<br>"; echo "_POST 数组: "; var_dump($_POST); ?>
用POST工具(如Postman)发送application/x-www-form-urlencoded格式的请求(带参数test=123),如果这个脚本也拿不到数据,说明问题在服务器配置;如果能拿到,再排查WordPress的主题或插件是否拦截了POST数据。
内容的提问来源于stack exchange,提问作者S_G
相关产品推荐
相关产品推荐

