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

PHP接口接收Raw JSON报404,Raw Text正常的问题求助

问题排查与解决方法

核心差异点:两种提交方式的唯一区别是请求头的Content-Type——Raw JSON模式会发送Content-Type: application/json,而Raw Text模式通常用text/plain或默认的application/x-www-form-urlencoded。结合本地正常、虚拟主机异常的情况,重点排查以下几个方向:

  • 检查虚拟主机的.htaccess伪静态规则
    不少虚拟主机的Rewrite规则会拦截非表单格式的请求。可以先临时注释掉.htaccess里的所有Rewrite规则,测试Raw JSON请求是否还返回404。如果恢复正常,就需要调整规则,允许application/json类型的请求访问你的API文件。示例调整代码:

    # 允许POST请求且Content-Type为application/json的请求直接访问API文件
    RewriteCond %{REQUEST_METHOD} POST
    RewriteCond %{CONTENT_TYPE} application/json
    RewriteRule ^your-api-file\.php$ - [L]
    

    把your-api-file.php替换成你的实际接口文件名,这条规则会让符合条件的请求跳过后续Rewrite规则,直接访问文件。

  • 排查ModSecurity安全模块拦截
    大多数Linux虚拟主机都启用了ModSecurity,它可能会误判application/json类型的POST请求为恶意操作(比如触发SQL注入防护规则),直接返回404。可以通过以下方式临时验证:
    在.htaccess中添加代码,关闭该接口文件的ModSecurity:

    <Files "your-api-file.php">
      SecFilterEngine Off
    </Files>
    

    测试请求是否正常,如果正常,再联系主机服务商查询具体触发的规则ID,针对性关闭即可,避免全局关闭影响安全性。

  • 查看服务器错误日志
    虚拟主机后台一般会提供错误日志入口(比如Apache的error_log),找到404错误发生时间点的日志记录,里面会明确标注错误原因——是Rewrite规则拦截、ModSecurity触发,还是其他服务器配置问题,能帮你快速定位根源。

  • 确认PHP配置与版本
    虽然本地和虚拟主机的PHP版本差异很少导致404,但可以检查虚拟主机的php.ini配置:

    • 确认post_max_size和upload_max_filesize足够容纳你的JSON数据(不过这个通常会返回413错误,而非404)
    • 确认allow_url_fopen处于开启状态(php://input依赖此配置)

内容的提问来源于stack exchange,提问作者NXC CONTROLS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:10:30