跳到内容
API 参考函数permanentRedirect

permanentRedirect

permanentRedirect 函数允许你将用户重定向到另一个 URL。permanentRedirect 可以在服务器组件、客户端组件、路由处理程序服务器操作中使用。

在流式上下文中,这将插入一个 meta 标签,以便在客户端发出重定向。在服务器操作中使用时,它将向调用者提供 303 HTTP 重定向响应。否则,它将向调用者提供 308(永久)HTTP 重定向响应。

如果资源不存在,你可以使用notFound 函数代替。

须知: 如果你希望返回 307(临时)HTTP 重定向而不是 308(永久),你可以使用redirect 函数代替。

参数

permanentRedirect 函数接受两个参数

permanentRedirect(path, type)
参数类型描述
pathstring要重定向到的 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 { id } = await params
  const team = await fetchTeam(id)
  if (!team) {
    permanentRedirect('/login')
  }
 
  // ...
}

须知permanentRedirect 不要求你使用 return permanentRedirect(),因为它使用了 TypeScript never 类型。