Vercel中手动ISR未重新验证全部域名的问题咨询
问题原因与解决方案
为什么旧域名缓存不会同步刷新?
Vercel会将每个绑定的域名视为独立的缓存命名空间,哪怕它们指向同一个Next.js应用。res.revalidate('/page')的触发逻辑是基于当前执行该代码时所在的域名(也就是你调用接口时用的新域名nice.com),只会刷新对应域名下的页面缓存。旧域名foo-bar.vercel.app的缓存是单独存储的,不会自动同步更新。
这不是Next.js的限制,而是Vercel的缓存策略设计——目的是支持同一应用绑定多域名时,各自可以有独立的缓存规则、CDN配置,甚至不同的业务场景需求。
怎么解决这个问题?
- 手动触发多域名缓存刷新:在你的revalidate逻辑中,针对每个需要刷新的域名,分别发起revalidate请求。比如可以写一个服务端函数,同时调用
https://foo-bar.vercel.app/api/[your-revalidate-route]和https://nice.com/api/[your-revalidate-route],传递要刷新的路径参数。注意要给revalidate接口加上权限校验(比如验证请求头里的密钥),防止恶意调用。 - 重定向旧域名到新域名:如果旧域名只是过渡使用,直接在Vercel的域名设置里给
foo-bar.vercel.app配置全局重定向,所有请求跳转到nice.com。这样用户访问旧域名时会自动转到新域名,也就不用维护旧域名的缓存了。 - 使用标签化缓存刷新(App Router):如果你的项目用的是Next.js 13+的App Router,可以用
revalidateTag替代路径式的revalidate。但要注意,即使是标签化刷新,Vercel的域名缓存隔离依然存在,还是需要确保每个域名的缓存都被触发刷新。
内容的提问来源于stack exchange,提问作者Noitidart
相关产品推荐
相关产品推荐

