redirect() și permanentRedirect() – Redirecționări programatice pe server în Next.js

Navigare, Link-uri și Rutare Dinamică Next.js 13+ (next/navigation)

Oprește execuția curentă pe server și trimite un răspuns HTTP de redirecționare către client.

Sintaxă
import { redirect, permanentRedirect } from 'next/navigation';

// Redirecționare temporară (307):
redirect('/login');

// Redirecționare permanentă (308):
permanentRedirect('/noua-adresa');

Ce face redirect() și permanentRedirect() - Redirecționări programatice pe server

Funcțiile redirect() și permanentRedirect() pot fi apelate în Server Components, Route Handlers și Server Actions.

Sub capotă, funcția aruncă o eroare specială internă Next.js (de tip `NEXT_REDIRECT`) care întrerupe randarea și trimite antetul HTTP `Location` adecvat.

`redirect()` emite un cod HTTP `307 Temporary Redirect` (implicit), iar `permanentRedirect()` emite codul `308 Permanent Redirect` util pentru schimbări definitive de SEO.

Exemple

Exemplul 1: Protejarea unei pagini de profil și redirecționarea la login dacă lipsește sesiunea

Oprește randarea și trimite vizitatorul neautentificat la pagina de autentificare.

import { redirect } from 'next/navigation';
import { preiaSesiune } from '@/lib/auth';

export default async function PanouAdmin() {
  const sesiune = await preiaSesiune();
  
  if (!sesiune) {
    redirect('/login?eroare=neautorizat');
  }

  return <h1>Panou de Administrare</h1>;
}

Ieșire în terminal

Clientul este redirecționat instant către /login.

Greșeli frecvente

  • Apelarea redirect() în interiorul unui bloc try/catch fără a re-arunca eroarea; dacă prinzi eroarea în catch (ex: `catch (e) { … }`), redirecționarea va fi înghițită și nu va funcționa.

Comenzi înrudite