REST API无index.php时无法获取POST数据,求排查.htaccess配置
问题排查与解决方案
问题出在你的RewriteRule规则写法上:当POST请求被重写到带查询字符串的URL时,Apache默认会将POST请求转换为GET请求,导致POST数据丢失。直接访问/avi/index.php时没有经过重写,POST方法被保留,所以能正常获取数据。
以下是两种修复方案:
方案一:使用PATH_INFO传递路径
修改.htaccess规则,去掉查询字符串,改用PATH_INFO传递路径:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php/$1 [L]
重写后请求会变为/index.php/avi,你可以在index.php中通过$_SERVER['PATH_INFO']获取路径信息,同时POST数据会被完整保留。
方案二:添加PT标志保留POST方法
如果需要保留原有的查询字符串传递方式,在RewriteRule中添加PT(Pass Through)标志,确保Apache保留原始请求方法:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/$1 [L,PT]
PT标志会让Apache将重写后的URL当作新请求继续处理,不会转换POST方法,从而保留POST数据。
另外,确认index.php中是通过$_POST全局变量获取POST数据,而非依赖其他可能受重写影响的方式。
内容的提问来源于stack exchange,提问作者Avijit
相关产品推荐
相关产品推荐

