permanentRedirect

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

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

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

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

المعاملات

تقبل دالة permanentRedirect معاملين:

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

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

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

القيمة المرجعة

لا ترجع دالة 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 team = await fetchTeam(params.id)
  if (!team) {
    permanentRedirect('/login')
  }

  // ...
}

معلومة مفيدة: لا تتطلب permanentRedirect منك استخدام return permanentRedirect() لأنها تستخدم نوع TypeScript never.