permanentRedirect
Функция permanentRedirect
позволяет перенаправлять пользователя на другой URL. permanentRedirect
может использоваться в серверных компонентах, клиентских компонентах, обработчиках маршрутов и серверных действиях.
При использовании в контексте потоковой передачи (streaming) функция вставляет метатег для выполнения перенаправления на стороне клиента. При использовании в серверном действии она возвращает ответ с HTTP-перенаправлением 303 вызывающей стороне. В остальных случаях возвращается ответ с HTTP-перенаправлением 308 (постоянным).
Если ресурс не существует, вместо этого можно использовать функцию notFound
.
Полезно знать: Если вы предпочитаете возвращать HTTP-перенаправление 307 (временное) вместо 308 (постоянного), используйте функцию
redirect
.
Параметры
Функция permanentRedirect
принимает два аргумента:
permanentRedirect(path, type)
Параметр | Тип | Описание |
---|---|---|
path | string | URL для перенаправления. Может быть относительным или абсолютным. |
type | 'replace' (по умолчанию) или 'push' (по умолчанию в серверных действиях) | Тип выполняемого перенаправления. |
По умолчанию permanentRedirect
использует push
(добавление новой записи в стек истории браузера) в серверных действиях и replace
(замена текущего URL в стеке истории браузера) во всех остальных случаях. Это поведение можно переопределить, указав параметр type
.
Параметр type
не имеет эффекта при использовании в серверных компонентах.
Возвращаемое значение
Функция permanentRedirect
не возвращает значения.
Пример
Вызов функции permanentRedirect()
выбрасывает ошибку NEXT_REDIRECT
и прекращает рендеринг сегмента маршрута, в котором она была вызвана.
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()
, так как функция использует тип TypeScriptnever
.