NextJS部署到Vercel生产环境后Rewrites规则不生效问题
Vercel环境NextJS Rewrite规则不生效的解决方法
- 先检查项目根目录是否存在
vercel.json文件,该文件的路由规则优先级高于next.config.js,如果有重复配置或者其他匹配/api/*的redirects/headers规则,会直接阻断Rewrite生效,清理冲突规则即可。 - 检查项目
pages/api(Pages Router)或者app/api(App Router)目录下是否存在对应路径的API文件,Vercel生产环境会优先匹配已存在的本地API路由,优先级高于Rewrite规则,移除冲突的本地API文件即可。 - 你当前配置中同时在
beforeFiles/afterFiles/fallback三个优先级队列写了重复的Rewrite规则,会导致Vercel边缘节点的路由匹配逻辑冲突,简化配置只保留beforeFiles队列的规则即可,参考配置如下:
async rewrites() { return { beforeFiles: [ { source: "/api/:path*", destination: "https://example.com/api/v1/:path*", } ] } }
- 如果是Next 13+ App Router项目,建议直接使用中间件实现代理,兼容性更强,不会出现环境差异问题,示例代码如下:
// 项目根目录新建middleware.ts import { NextResponse } from 'next/server' import type { NextRequest } from 'next/server' export function middleware(request: NextRequest) { if (request.nextUrl.pathname.startsWith('/api/')) { const targetPath = request.nextUrl.pathname.replace('/api/', '/api/v1/') const targetUrl = new URL(targetPath + request.nextUrl.search, 'https://example.com') return NextResponse.rewrite(targetUrl) } return NextResponse.next() } export const config = { matcher: '/api/:path*', }
- 最后确认部署的分支为生产分支,且Vercel项目设置中没有开启覆盖NextJS配置的路由相关选项,重新部署即可生效。
内容的提问来源于stack exchange,提问作者Y M
相关产品推荐
相关产品推荐

