Next.js 13.3.0 Rewrites配置调用外部API失效求助
以下是针对你的问题的具体排查步骤和解决方案:
确认Next.js版本:Rewrites功能从Next.js 9.5.0版本开始支持,先通过命令
npm list next检查版本,若低于9.5.0,执行npm install next@latest升级到最新稳定版。重启开发服务器:修改
next.config.js后必须重启Next.js开发服务器,否则新配置不会生效。检查本地API路由冲突:如果你的项目
pages/api目录下存在与请求路径匹配的文件(比如请求/api/user时,pages/api/user.js存在),Next.js会优先使用本地API路由,跳过rewrites规则。删除或重命名冲突的本地API文件即可。验证请求路径匹配:确保前端请求的路径完全匹配rewrites的
source规则。比如你配置的source: "/api/:path*",前端必须请求/api/xxx这类路径,才能被转发到https://localhost:50575/api/xxx。如果目标API的路径不需要/api前缀,要调整destination为https://localhost:50575/:path*。检查配置是否加载:在
rewrites函数中添加日志,确认配置是否被读取:module.exports = { reactStrictMode: true, async rewrites() { console.log("Rewrites规则已加载"); return [ { source: "/api/:path*", destination: "https://localhost:50575/api/:path*", }, ] }, }重启服务器后查看控制台,若未打印日志,检查
next.config.js是否在项目根目录,文件名是否正确(必须是next.config.js)。排查HTTPS证书问题:目标API使用
https://localhost,可能存在浏览器不信任自签证书的情况,导致请求静默失败。可以临时将destination改为http://localhost:50575/api/:path*(若目标API支持HTTP),或手动在浏览器中信任该localhost的HTTPS证书。直接测试转发效果:在浏览器地址栏直接访问
http://localhost:3000/api/xxx(假设你的Next.js运行在3000端口),观察返回内容是否来自目标APIhttps://localhost:50575/api/xxx,以此验证rewrites是否生效。
内容的提问来源于stack exchange,提问作者Patricio Urbieta

