문서
App Router 사용하기
permanentRedirect

permanentRedirect

permanentRedirect 함수를 사용하면 사용자를 다른 URL로 리다이렉트할 수 있습니다. permanentRedirect는 서버 컴포넌트, 클라이언트 컴포넌트, 라우트 핸들러, 그리고 서버 액션에서 사용할 수 있습니다.

스트리밍 컨텍스트에서 사용될 때, 이는 클라이언트 측에서 리다이렉트를 수행하기 위한 메타 태그를 삽입합니다. 서버 액션에서 사용될 때는 호출자에게 303 HTTP 리다이렉트 응답을 제공합니다. 그 외의 경우에는 호출자에게 308(영구) HTTP 리다이렉트 응답을 제공합니다.

리소스가 존재하지 않는 경우, 대신 notFound 함수를 사용할 수 있습니다.

알아두면 좋은 점: 308(영구) HTTP 리다이렉트 대신 307(임시) HTTP 리다이렉트를 반환하고 싶다면, 대신 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는 TypeScript never 타입을 사용하기 때문에 return permanentRedirect()를 사용할 필요가 없습니다.