Next.js中能否同时配置URL重定向与重写?Vercel多域名场景问题
解决Vercel多域名下重写与重定向的无限循环问题
你当前的配置会触发无限循环,原因很直接:
- 当用户访问
www.secondary-domain.com/时,rewrite规则会把请求转发到www.primary-domain.com/about - 而
www.primary-domain.com/about又会被redirect规则重定向回www.secondary-domain.com/ - 这样请求就在两个域名之间来回跳转,形成死循环
要解决这个问题,核心是让重写和重定向规则只针对各自的域名生效,避免交叉触发。修改你的next.config.js如下:
/** @type {import('next').NextConfig} */ const nextConfig = { async rewrites() { return [ { // 仅匹配来自secondary域名的根路径请求 source: '/', destination: 'https://www.primary-domain.com/about', has: [ { type: 'host', value: 'www.secondary-domain.com' } ] } ] }, async redirects() { return [ { // 仅匹配来自primary域名的/about路径请求 source: '/about', destination: 'https://www.secondary-domain.com', permanent: true, has: [ { type: 'host', value: 'www.primary-domain.com' } ] } ] } } module.exports = nextConfig
配置说明
- 重写规则:通过
has参数限定只有当请求的Host是www.secondary-domain.com时,才会把根路径转发到主域名的/about页面,这样不会影响主域名自身的请求 - 重定向规则:同样通过
has参数限定只有主域名的/about请求才会被重定向到secondary域名,避免secondary域名的请求触发这条规则
额外注意事项
- 确保两个域名都已经正确添加到Vercel项目的「Domains」列表中,并且完成了DNS解析验证
- 如果需要支持非www前缀的域名(比如
secondary-domain.com),可以在has的value里添加对应的域名,或者使用通配符(比如*.secondary-domain.com)
内容的提问来源于stack exchange,提问作者Burger Sasha
相关产品推荐
相关产品推荐

