إعادة توجيه روابط المنتدى القديمة عندما تحتوي المسار على اسم مورد من Discourse

مرحباً،

عناوين المنتدى القديمة الخاصة بي تكون بالشكل التالي: /posts/t{topic_id}-{url_slug}.

لقد استخدمت ميزة “Permalink” في Discourse لربط عناوين المنتدى القديمة بعناوين Discourse الجديدة.

المشكلة هي أن “Rails Router” يقوم بتوجيه الطلبات الخاصة بعناوين المنتدى القديمة إلى أحد المسارات المرتبطة بمورد “posts”. (لا أعرف أي مسار).

“Permalink Normalization” يعمل بعد الانتهاء من التوجيه، لذا فهو ليس حلاً.

أعتقد أن الحل هو إضافة مسار مخصص في ملف config\routes.rb لتجاوز معالجة الطلب بواسطة “PostsController” إذا كان العنوان بالشكل التالي: /posts/t{topic_id}-{url_slug}، ولكنني لست متمكناً بما يكفي من “Rails Routing” لإجراء هذا التغيير. أو ربما هذه ليست الطريقة الصحيحة؟

شكراً لك.

إعجاب واحد (1)

هذا غير مؤسف.

كيف تبدو؟ ما هي الروابط الدائمة التي أضفتها؟

هل المنتدى مباشر بالفعل أم لا يزال بإمكانك تشغيل برنامج الاستيراد؟ (في الواقع، يمكنك إنشاء برنامج Ruby يمكنك تشغيله في Rails لإضافة روابط دائمة مثل تلك التي أصفها.)

أعتقد أنك ربما ترغب في جعل روابطك الدائمة شيئًا مثل /oldforum/{topic_id} ثم إضافة بعض التكوينات إلى nginx لالتقاط عناوين URL /posts/t هذه وإعادة تعيينها إلى /oldforum/{topic_id}.

لذلك (وفقًا للذكاء الاصطناعي) ستقوم بعمل replace باستخدام pups (في وقت قريب يمكنك إضافته إلى منفذ، لكنني لا أعرف متى سيحدث ذلك) لإضافة هذا إلى تكوين nginx الخاص بك discourse.conf:

# ضع هذا داخل كتلة server {} الخاصة بك
location ~ ^/posts/t(?<topic_id>\d+)-.*$ {
    # إعادة توجيه دائم (301)
    return 301 /oldforum/$topic_id;
    
    # بدلاً من ذلك، لإعادة توجيه مؤقت (302)، استخدم:
    # return 302 /oldforum/$topic_id;
}

سأختبر ذلك عن طريق إجراء هذه التغييرات يدويًا داخل الحاوية ثم العمل بشكل عكسي لإضافة التغييرات إلى app.yml الخاص بك.

إعجابَين (2)

:laughing:

نعم، هذا بالضبط ما فعلته؛ لقد كتبت نصًا برمجيًا بلغة Ruby لإضافة جميع الروابط الدائمة.

لقد نجح هذا! شكرا لك.

3 إعجابات

لقد اكتشفت أن هذا الحل قد لا يكون مناسبًا لأن سلسلة إعادة التوجيه ستؤثر على نقاط تحسين محركات البحث (SEO) للموقع. يستغرق الأمر عمليتي إعادة توجيه 301 وثلاث طلبات للوصول إلى المنشور الفعلي.

وبعد ذلك، السماح لـ Permalink بمعالجة الطلب. يبدو أن هذا يجب أن ينجح ولكني لست متأكدًا.

إعجاب واحد (1)