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

部署于cPanel的Express 4.17.1服务接收POST数据时req.body为undefined

问题根源

你遇到的问题确实是.htaccess配置错误导致的,存在两个核心问题:

  1. 重定向规则顺序错误,且HTTP转HTTPS使用了默认的302临时重定向:POST请求遇到302/301重定向时,客户端会默认将请求方法转为GET,同时丢弃所有请求体,这就是你本地测试正常、服务器端curl正常(curl不会默认跟随重定向,或跟随的时候也会保留方法),但Postman请求拿不到body的核心原因。
  2. SPA重写规则没有排除API路径,所有非静态资源的请求都被转发到了index.html,根本没有到达你的Express服务。

解决步骤

1. 修复.htaccess配置

将规则顺序调整,同时使用307状态码做重定向(307重定向会保留原始请求方法和请求体),并排除API路径不参与SPA重写:

RewriteEngine On
# HTTP转HTTPS,307重定向保留POST请求的方法和请求体
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.starrynights.co.nz/$1 [R=307,L]

RewriteBase /
RewriteRule ^index\.html$ - [L]
# 排除静态文件、目录,以及API路径不重定向到index.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/send_mail
# 后续如果新增API统一用/api前缀的话,这里改成!^/api/即可适配所有接口
RewriteRule . /index.html [L]

2. 修复Express服务代码

如果你需要接收x-www-form-urlencoded格式的请求,需要放开之前注释的解析中间件:

// 取消该行注释,解析x-www-form-urlencoded格式请求体
app.use(express.urlencoded({ extended: true }));

如果需要接收form-data格式的普通文本字段,安装multer后添加如下配置:

const multer = require('multer');
// 解析无文件上传的form-data请求
app.use(multer().none());

3. 验证配置生效

修改完成后重启cPanel上的Node.js应用,清空Postman缓存后再次发起请求,在Postman控制台确认重定向状态码为307,且重定向后的请求仍为POST方法、携带请求体即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 00:45:04