permanentRedirect

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

عند استخدامها في سياق البث (streaming)، ستقوم بإدراج وسم meta لإصدار إعادة التوجيه على جانب العميل. عند استخدامها في فعل خادم (server action)، ستقدم استجابة إعادة توجيه HTTP 303 إلى المتصل. وإلا، ستقدم استجابة إعادة توجيه HTTP 308 (دائمة) إلى المتصل.

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

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

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

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

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

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

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

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

لا ترجع 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.