NextJS条件重定向配置:博客迁移时如何排除特定路径不跳转
问题根源
你当前的配置存在两个问题:
- NextJS的重定向规则按数组从上到下的顺序匹配,匹配到第一条规则就会直接生效,你把sitemap.xml的豁免规则写在通用重定向规则之后,永远不会触发
- 第一条
/:slug规则过于宽泛,会匹配所有根路径下的单层路径,包括带后缀的静态资源文件
解决方案
用NextJS重定向规则自带的正则匹配能力,给slug参数加匹配约束,直接排除你不需要重定向的路径即可,不需要单独为每个静态资源写豁免规则。
修改后的配置代码
async redirects() { return [ { // 仅匹配不带后缀的根路径slug,自动排除所有带.的静态资源(xml/txt/ico/json等) source: '/:slug([^.]+)', destination: '/blog/:slug', permanent: true }, // 如果你还有其他根路径下不需要重定向的页面(比如/about、/contact),可以改成如下规则排除指定路径: // source: '/:slug((?!about|contact|sitemap.xml|robots.txt).*)', ] }
配置说明
[^.]+是正则约束,代表slug只能匹配不含.的字符串,自动跳过所有带后缀的静态资源路径(sitemap.xml、robots.txt、favicon.ico等都不会被重定向)- 如果有特殊的根路径页面不需要重定向,用
(?!xxx|yyy)的排除语法把对应路径加进去即可,不需要单独写多条豁免规则 - 301重定向是永久重定向,配置生效后建议清理浏览器缓存再测试,避免旧缓存影响结果
内容的提问来源于stack exchange,提问作者Shrikar
相关产品推荐
相关产品推荐

