AWS Amplify部署Next.js SSG项目 rewrite/redirect规则配置问题
问题根因
AWS Amplify的重写/重定向规则按从上到下的顺序匹配,命中第一条符合条件的规则后就会停止匹配后续规则。你将通用的无后缀资源匹配规则放在原有业务规则前面时,所有请求会优先命中该规则,直接导致原有/e/*、/n/*、/s/*等业务规则全部失效。
解决方案
1. 修正规则优先级顺序
所有规则严格按照「精准度从高到低」排序,具体顺序如下:
# 原有业务规则(注意修正正则笔误:把\d{1.2}改为\d{1,2}) /e/<*> /e/[eId] 200 (Rewrite) /n/<*> /n/[nId] 200 (Rewrite) /s/<\d{1,2}> /s/[sId] 200 (Rewrite) /s/<\d{1,2}>/s /s/[sId]/s 200 (Rewrite) /s/<\d{1,2}>/i/<\d{1,2}> /s/[sId]/i/[iId] 200 (Rewrite) /s/<\d{1,2}>/s/<\d{1,2}> /s/[sId]/s/[sId2] 200 (Rewrite) /s/<\d{1,2}>/s/<\d{1,2}>/i/<\d{1,2}> /s/[sId]/s/[sId2]/i/[iId] 200 (Rewrite) # 新增根路径下someId匹配规则,排除已匹配的/e、/n、/s前缀,同时排除带后缀的静态资源 /<^[ens]/[^.]+> /[someId] 200 (Rewrite) # 通用客户端路由兜底规则 </^[^.]+$|\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf)$)([^.]+$)/> /index.html 200 (Rewrite) # 最终404兜底规则 /<*> /index.html 404 (Rewrite)
2. 解决路径自动加尾斜杠问题
你可以任选一种方案处理:
- 方案1:进入Amplify控制台「构建设置」→「重写和重定向」页面,关闭右上角的「纯净URL」功能,即可禁止平台自动给路径添加尾斜杠。
- 方案2:在所有规则最顶部添加一条重定向规则,统一将带尾斜杠的非资源路径跳转到无尾斜杠格式:
/<*>/ /<*> 301 (Redirect)
规则优化建议
- 如果你使用Next.js的
output: 'export'模式导出纯静态资源,建议所有动态路由都通过generateStaticParams生成对应的静态HTML文件,减少对rewrite规则的依赖。 - 404场景建议单独生成
404.html,将最后一条404兜底规则的目标改为/404.html,符合静态站点的标准响应逻辑。 - 定期清理冗余规则,避免规则过多出现意外匹配冲突。
内容的提问来源于stack exchange,提问作者Seongman Kim
相关产品推荐
相关产品推荐

