去年双十一的活动页用 301 跳到主会场,活动结束后删掉规则,仍有用户访问旧地址被带到已下架的主会场,清缓存也没用。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,301 表示永久移动,浏览器和中间层会长期缓存这条映射,规则删了客户端手里的缓存还在。临时活动只该用 302,响应头也不要给长缓存。
「301 302 用反」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。改完顺手把文档补一句,省得下次自己重新推一遍。
location = /2025-sale {
return 302 https://www.example.com/campaign;
add_header Cache-Control "no-store";
}
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
具体做法是,短期活动一律用 302,响应头写 no-store;已经发出去的 301 只能反向再发一次回原地址;在 CDN 上单独清这条路径的缓存;活动页留一个说明页,别直接删。
最后用这个标准收尾,活动地址返回 302 且响应头是 no-store,下线后浏览器不再自动跳转。
