permanentRedirect
permanentRedirect
函数允许您将用户重定向到另一个 URL。permanentRedirect
可用于服务器组件、客户端组件、路由处理程序 和 服务器操作。
在流式上下文中使用时,这将插入一个元标记以在客户端发出重定向。在服务器操作中使用时,它将向调用方提供 303 HTTP 重定向响应。否则,它将向调用方提供 308 (永久) HTTP 重定向响应。
如果资源不存在,您可以改用 notFound
函数。
注意:如果您希望返回 307 (临时) HTTP 重定向而不是 308 (永久),则可以使用
redirect
函数。
参数
permanentRedirect
函数接受两个参数
permanentRedirect(path, type)
参数 | 类型 | 描述 |
---|---|---|
path | 字符串 | 要重定向到的 URL。可以是相对路径或绝对路径。 |
type | 'replace' (默认)或 'push' (服务器操作中的默认值) | 要执行的重定向类型。 |
默认情况下,permanentRedirect
将在 服务器操作 中使用 push
(在浏览器历史记录堆栈中添加新条目),在其他所有地方使用 replace
(替换浏览器历史记录堆栈中的当前 URL)。您可以通过指定 type
参数来覆盖此行为。
在服务器组件中使用时,type
参数无效。
返回值
permanentRedirect
不返回值。
示例
调用 permanentRedirect()
函数会抛出 NEXT_REDIRECT
错误并终止其抛出所在路由段的渲染。
app/team/[id]/page.js
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 team = await fetchTeam(params.id)
if (!team) {
permanentRedirect('/login')
}
// ...
}
注意:
permanentRedirect
不需要您使用return permanentRedirect()
,因为它使用 TypeScriptnever
类型。
这有帮助吗?