Menu

permanentRedirect

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

在流式上下文中使用时,它会插入一个元标签以在客户端触发重定向。在服务器操作中使用时,它会向调用方返回一个 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 team = await fetchTeam(params.id);
  if (!team) {
    permanentRedirect("/login");
  }
 
  // ...
}

值得注意的是permanentRedirect 不需要你使用 return permanentRedirect(),因为它使用了 TypeScript 的 never 类型。