permanentRedirect

Функция permanentRedirect позволяет перенаправлять пользователя на другой URL. permanentRedirect может использоваться в серверных компонентах, клиентских компонентах, обработчиках маршрутов и серверных действиях.

При использовании в контексте потоковой передачи (streaming) функция вставляет метатег для выполнения перенаправления на стороне клиента. При использовании в серверном действии она возвращает ответ с HTTP-перенаправлением 303 вызывающей стороне. В остальных случаях возвращается ответ с HTTP-перенаправлением 308 (постоянным).

Если ресурс не существует, вместо этого можно использовать функцию notFound.

Полезно знать: Если вы предпочитаете возвращать HTTP-перенаправление 307 (временное) вместо 308 (постоянного), используйте функцию redirect.

Параметры

Функция permanentRedirect принимает два аргумента:

permanentRedirect(path, type)
ПараметрТипОписание
pathstringURL для перенаправления. Может быть относительным или абсолютным.
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.