PHP回调URL无尾斜杠时POST JSON数据接收失败求助
问题根本原因
Apache默认的mod_dir模块会对没有尾斜杠的目录请求返回301/302重定向到带尾斜杠的地址,这个过程中POST请求会被自动转为GET请求,php://input 中的JSON数据会全部丢失,这就是重定向后能触发页面但拿不到数据的核心原因。
另外你原有.htaccess的重写规则存在逻辑冗余:RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} !-f 两个条件用OR连接,不管请求路径是否对应真实文件都会触发重写,可能会影响静态资源的正常访问。
解决方案(推荐)
替换你现有的.htaccess内容为以下代码:
<IfModule mod_rewrite.c> RewriteEngine On # 关闭自动补尾斜杠的外部301跳转,避免POST数据丢失 DirectorySlash Off # 匹配mypesa路径(有无尾斜杠都命中),直接内部重写到index.php,无外部跳转 RewriteRule ^op/api/mypesa(/.*)?$ op/api/mypesa/index.php [L,QSA] # 其他请求的通用重写规则,仅对非文件、非目录的请求生效 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA] </IfModule>
这个方案采用内部重写逻辑,全程没有外部跳转动作,POST数据会完整保留传递给index.php。
验证注意事项
- 修改完
.htaccess后需要清空Postman/浏览器的缓存,之前缓存的301重定向规则会导致测试失效,建议开启Postman的「禁用缓存」功能测试。 - 优先查看
M_PESAConfirmationResponse.txt日志文件校验结果:无尾斜杠的请求只要日志里有写入内容,就说明数据已经正常传递。
内容的提问来源于stack exchange,提问作者Shadrack Kipkorir
相关产品推荐
相关产品推荐

