Next.js中子域名转子路径的URL重写/重定向实现问题
关于Next.js重写规则的问题解答
1. 协议+子域名是否属于source范围?
Next.js的rewrites配置里,source只负责匹配请求的路径部分(必须以/开头),协议、域名、子域名都不属于source的匹配范围。你之前写完整URL作为source的写法是错误的,这也是报错的直接原因。
2. 变量的: 和*用法
- 变量前必须加
:,用来标记这是一个动态参数,比如:postOrProgramId就是提取子域名里的动态部分。 *是通配符,用来匹配剩余的全部内容,如果你需要把子域名的完整内容都转成路径,就需要在变量后面加*,比如:postOrProgramId*。
3. 子域名转子路径的正确配置
要实现子域名(如amazing-campaign-in-nyc.tikex-dev.com)转主域名路径(tikex-dev.com/amazing-campaign-in-nyc),需要用rewrites的has数组来匹配请求的host(子域名),然后提取动态参数到destination里。具体配置如下:
async rewrites() { return [ { // 匹配所有子域名(除了主域名本身) has: [ { type: 'host', value: ':postOrProgramId*.tikex-dev.com', }, ], // 匹配根路径及后续嵌套路径 source: '/:path*', // 把提取的子域名参数放到主域名的路径里 destination: '/:postOrProgramId*/:path*', }, ]; }
注意:本地开发环境下,Next.js默认不支持自定义host匹配,你需要修改本地hosts文件,把测试子域名指向127.0.0.1,并且启动项目时指定域名:next dev -H tikex-dev.com,才能在本地测试这个规则。
4. 两条重写规则是否会冲突?
不会冲突。你的两条规则匹配逻辑完全不同:
- 第一条是通过
host匹配子域名请求,然后转主域名路径; - 第二条是匹配路径以
/api/开头的请求,反向代理到API服务器。
Next.js会先根据请求的host和路径匹配对应的规则,两者的触发条件没有重叠,所以不会互相影响。
内容的提问来源于stack exchange,提问作者user19473296
相关产品推荐
相关产品推荐

