إعادة التوجيه (redirect)

تتيح لك وظيفة redirect توجيه المستخدم إلى عنوان URL آخر. يمكن استخدام redirect في مكونات الخادم (Server Components)، ومكونات العميل (Client Components)، ومعالجات المسارات (Route Handlers)، ووأفعال الخادم (Server Actions).

عند استخدامها في سياق البث (streaming context)، سيقوم هذا بإدراج وسم meta لتنفيذ إعادة التوجيه على جانب العميل. وإلا، سيقوم بإرسال استجابة إعادة توجيه HTTP 307 إلى المتصل.

إذا لم يكن المورد موجودًا، يمكنك استخدام وظيفة notFound بدلاً من ذلك.

معلومة مفيدة: إذا كنت تفضل إرجاع إعادة توجيه HTTP 308 (دائم) بدلاً من 307 (مؤقت)، يمكنك استخدام وظيفة permanentRedirect بدلاً من ذلك.

المعاملات (Parameters)

تقبل وظيفة redirect وسيطين:

redirect(path, type)
المعاملالنوعالوصف
pathstringعنوان URL لإعادة التوجيه إليه. يمكن أن يكون مسارًا نسبيًا أو مطلقًا.
type'replace' (افتراضي) أو 'push' (افتراضي في Server Actions)نوع إعادة التوجيه المطلوب تنفيذه.

بشكل افتراضي، سيستخدم redirect push (إضافة إدخال جديد إلى سجل المتصفح) في أفعال الخادم (Server Actions) وreplace (استبدال عنوان URL الحالي في سجل المتصفح) في جميع الأماكن الأخرى. يمكنك تجاوز هذا السلوك عن طريق تحديد معامل type.

لا يؤثر معامل type عند استخدامه في مكونات الخادم (Server Components).

القيم المرجعة (Returns)

لا ترجع وظيفة redirect أي قيمة.

مثال

استدعاء وظيفة redirect() يثير خطأ NEXT_REDIRECT ويوقف عرض مقطع المسار الذي تم إثارته فيه.

app/team/[id]/page.js
import { redirect } 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) {
    redirect('/login')
  }

  // ...
}

معلومة مفيدة: لا يتطلب redirect استخدام return redirect() حيث يستخدم نوع TypeScript never.

الإصدارالتغييرات
v13.0.0تم إدخال redirect.