permanentRedirect
permanentRedirect
函数允许你将用户重定向到另一个 URL。permanentRedirect
可用于服务器组件、客户端组件、路由处理程序 和 服务器操作。
¥The permanentRedirect
function allows you to redirect the user to another URL. permanentRedirect
can be used in Server Components, Client Components, Route Handlers, and Server Actions.
当在流上下文中使用时,这将插入一个元标记以在客户端发出重定向。当在服务器操作中使用时,它将向调用者提供 303 HTTP 重定向响应。否则,它将向调用者提供 308(永久)HTTP 重定向响应。
¥When used in a streaming context, this will insert a meta tag to emit the redirect on the client side. When used in a server action, it will serve a 303 HTTP redirect response to the caller. Otherwise, it will serve a 308 (Permanent) HTTP redirect response to the caller.
如果资源不存在,你可以使用 notFound
功能。
¥If a resource doesn't exist, you can use the notFound
function instead.
很高兴知道:如果你希望返回 307(临时)HTTP 重定向而不是 308(永久),则可以使用
redirect
功能。¥Good to know: If you prefer to return a 307 (Temporary) HTTP redirect instead of 308 (Permanent), you can use the
redirect
function instead.
参数
¥Parameters
permanentRedirect
函数接受两个参数:
¥The permanentRedirect
function accepts two arguments:
permanentRedirect(path, type)
范围 | 类型 | 描述 |
---|---|---|
path | string | 要重定向到的 URL。可以是相对路径或绝对路径。 |
type | 'replace' (默认)或 'push' (服务器操作中的默认值) | 要执行的重定向类型。 |
默认情况下,permanentRedirect
将在其他任何地方的 服务器操作 和 replace
(替换浏览器历史记录堆栈中的当前 URL)中使用 push
(向浏览器历史记录堆栈添加新条目)。你可以通过指定 type
参数来覆盖此行为。
¥By default, permanentRedirect
will use push
(adding a new entry to the browser history stack) in Server Actions and replace
(replacing the current URL in the browser history stack) everywhere else. You can override this behavior by specifying the type
parameter.
在服务器组件中使用时,type
参数无效。
¥The type
parameter has no effect when used in Server Components.
返回
¥Returns
permanentRedirect
不返回值。
¥permanentRedirect
does not return a value.
示例
¥Example
调用 permanentRedirect()
函数会引发 NEXT_REDIRECT
错误并终止引发该错误的路由段的渲染。
¥Invoking the permanentRedirect()
function throws a NEXT_REDIRECT
error and terminates rendering of the route segment in which it was thrown.
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
类型。¥Good to know:
permanentRedirect
does not require you to usereturn permanentRedirect()
as it uses the TypeScriptnever
type.