redirects
重定向允许你将传入请求路径重定向到不同的目标路径。
要使用重定向,你可以在 next.config.js 中使用 redirects 键:
next.config.js
module.exports = {
async redirects() {
return [
{
source: '/about',
destination: '/',
permanent: true,
},
]
},
}
redirects 是一个异步函数,期望返回一个包含具有 source、destination 和 permanent 属性的对象的数组:
source是传入请求路径模式。destination是你想要路由到的路径。permanenttrue或false- 如果为true将使用 308 状态码,指示客户端/搜索引擎永久缓存重定向,如果为false将使用 307 状态码,这是临时的且不被缓存。
为什么 Next.js 使用 307 和 308? 传统上,302 用于临 时重定向,301 用于永久重定向,但许多浏览器将重定向的请求方法更改为
GET,无论原始方法如何。例如,如果浏览器向POST /v1/users发出请求,返回状态码302,位置为/v2/users,后续请求可能是GET /v2/users而不是预期的POST /v2/users。Next.js 使用 307 临时重定向和 308 永久重定向状态码来明确保留使用的请求方法。
basePath:false或undefined- 如果为 false,匹配时不会包含basePath,仅可用于外部重定向。locale:false或undefined- 匹配时是否不应包含区域设置。has是具有type、key和value属性的 has 对象 数组。missing是具有type、key和value属性的 missing 对象 数组。
重定向在文件系统(包括页面和 /public 文件)之前进行检查。
使用 Pages 路由时,除非存在 中间件 并匹配路径,否则重定向不会应用于客户端路由(Link、router.push)。
当应用重定向时,请求中提供的任何查询值都会传递到重定向目标。例如,请参阅以下重定向配置:
{
source: '/old-blog/:path*',
destination: '/blog/:path*',
permanent: false
}
提示:记住在
source和destination路径的路径参数中的冒号:前包含正斜杠/,否则路径将被视为字面字符串,你可能会遇到无限重定向的风险。
当请求 /old-blog/post-1?hello=world 时,客户端将被重定向到 /blog/post-1?hello=world。