permanentRedirect

La fonction permanentRedirect permet de rediriger l'utilisateur vers une autre URL. Elle peut être utilisée dans les composants serveur, les composants client, les gestionnaires de route (Route Handlers) et les actions serveur (Server Actions).

Lorsqu'elle est utilisée dans un contexte de streaming, cette fonction insère une balise meta pour effectuer la redirection côté client. Dans une action serveur, elle renvoie une réponse de redirection HTTP 303 à l'appelant. Sinon, elle renvoie une réponse de redirection HTTP 308 (Permanente) à l'appelant.

Si une ressource n'existe pas, vous pouvez utiliser la fonction notFound à la place.

Bon à savoir : Si vous préférez renvoyer une redirection HTTP 307 (Temporaire) au lieu de 308 (Permanente), vous pouvez utiliser la fonction redirect à la place.

Paramètres

La fonction permanentRedirect accepte deux arguments :

permanentRedirect(path, type)
ParamètreTypeDescription
pathstringL'URL vers laquelle rediriger. Peut être un chemin relatif ou absolu.
type'replace' (par défaut) ou 'push' (par défaut dans les Server Actions)Le type de redirection à effectuer.

Par défaut, permanentRedirect utilise push (ajoute une nouvelle entrée dans l'historique du navigateur) dans les actions serveur (Server Actions) et replace (remplace l'URL actuelle dans l'historique du navigateur) partout ailleurs. Vous pouvez modifier ce comportement en spécifiant le paramètre type.

Le paramètre type n'a aucun effet lorsqu'il est utilisé dans les composants serveur.

Valeur de retour

permanentRedirect ne renvoie aucune valeur.

Exemple

L'appel de la fonction permanentRedirect() génère une erreur NEXT_REDIRECT et interrompt le rendu du segment de route dans lequel elle a été déclenchée.

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')
  }

  // ...
}

Bon à savoir : permanentRedirect ne nécessite pas d'utiliser return permanentRedirect() car elle utilise le type never de TypeScript.

On this page