permanentRedirect 函数允许您将用户重定向到另一个 URL。permanentRedirect 可以在服务器组件、客户端组件、路由处理器 和 服务器操作 中使用。
在流式传输上下文中使用时,这将在客户端插入一个 meta 标签以发出重定向。在服务器操作中使用时,它将向调用者提供 303 HTTP 重定向响应。否则,它将向调用者提供 308(永久)HTTP 重定向响应。
如果资源不存在,您可以使用 notFound 函数 代替。
须知:如果您更倾向于返回 307(临时)HTTP 重定向而不是 308(永久),您可以使用
redirect函数 代替。
permanentRedirect 函数接受两个参数:
permanentRedirect(path, type)| 参数 | 类型 | 描述 |
|---|---|---|
path | string | 要重定向到的 URL。可以是相对路径或绝对路径。 |
type | 'replace'(默认)或 'push'(在服务器操作中为默认) | 要执行的重定向类型。 |
默认情况下,permanentRedirect 将在 服务器操作 中使用 push(将新条目添加到浏览器历史堆栈),而在其他地方使用 replace(替换浏览器历史堆栈中的当前 URL)。您可以通过指定 type 参数来覆盖此行为。
type 参数在服务器组件中使用时没有效果。
permanentRedirect 不返回任何值。
调用 permanentRedirect() 函数会抛出一个 NEXT_REDIRECT 错误,并终止抛出该错误的路由段的渲染。
import { permanentRedirect } from 'next/navigation'
async function fetchTeam(id) {
const res = await fetch('https://...')
if (!res.ok) return undefined
return res.json()
}
export default async function Profile({ params }) {
const { id } = await params
const team = await fetchTeam(id)
if (!team) {
permanentRedirect('/login')
}
// ...
}须知:
permanentRedirect不需要您使用return permanentRedirect(),因为它使用了 TypeScript 的never类型。