Redirect old forum URLs to new Discourse URLs using permalinks

<div data-theme-toc="true"> </div>

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

إذا انتقلت من برامج منتديات أخرى إلى Discourse باستخدام أحد نصوص الاستيراد الخاصة بنا، فمن المحتمل أنك تريد أن تستمر جميع نتائج بحث Google التي اكتسبتها بشق الأنفس في الإشارة إلى نفس المحتوى. يحتوي Discourse على طريقة مدمجة للتعامل مع هذا الأمر كبديل لكتابة قواعد nginx، باستخدام جدول البحث عن الروابط الدائمة.

يسمح لك جدول الروابط الدائمة بتعيين شيئين: عنوان URL للمطابقة، وما يجب أن يعرضه عنوان URL هذا. هناك بعض الخيارات لتحديد مكان إعادة توجيه عنوان URL. قم بتعيين أحد هذه الخيارات:

  • topic_id: لعرض موضوع
  • post_id: لعرض منشور معين داخل موضوع
  • category_id: لعرض فئة
  • external_url: لإعادة التوجيه إلى عنوان URL قد لا ينتمي إلى مثيل Discourse الخاص بك

على سبيل المثال، إذا كانت عناوين URL للموضوعات في منتديك الأصلي تبدو مثل http://example.com/discussion/12345، وكان عنوان URL لهذا الموضوع بعد الاستيراد هو http://example.com/t/we-moved/987، فيمكنك إعداد التعيين على النحو التالي:

cd /var/discourse
./launcher enter app
rails c
Permalink.create(url: '/discussion/12345', topic_id: 987)

سيقوم Discourse بعد ذلك بإجراء إعادة توجيه باستخدام رمز حالة استجابة HTTP 301 (تم النقل بشكل دائم) إلى عنوان URL الصحيح لمعرف الموضوع 12345. يجب أن يتسبب الرمز 301 في قيام محركات البحث بتحديث سجلاتها والبدء في استخدام عناوين URL الجديدة.

إذا كنت تريد إعادة توجيه بعض عناوين URL بعيدًا عن Discourse، فيمكنك القيام بذلك عن طريق تعيين external_url:

Permalink.create(url: '/discussion/12345', external_url: 'http://archived.example.com/discussion/12345')

معلومات إضافية

للعثور على معرف الفئة الفرعية، يمكنك البحث عنها باستخدام الكلمة المفتاحية (slug) على النحو التالي:

Category.find_by_slug('products').id

لحذف الرابط الدائم لعنوان URL هذا، قم بما يلي:

Permalink.find_by_url("/blah").destroy

يمكن أن يكون هناك سجل رابط دائم واحد فقط لكل عنوان URL، لذا ابحث فقط حسب عنوان URL.

إنشاء خريطة مواضيع من MyBB إلى Discourse

أسئلة إعادة توجيه Discourse إلى WordPress

https://meta.discourse.org/t/discourse-to-wordpress-redirect-questions/87031

تسوية الروابط الدائمة


آخر مراجعة بواسطة @SaraDev في 2022-06-03T20:00:00Z

37 إعجابًا

هل من الممكن تخزين قاعدة إعادة الكتابة مباشرة في مجموعة دوكر الخاصة بـ discourse؟ يوجد خادم ويب يتولى مسؤولية http و ssl، هل يمكنني إضافة شيء هناك؟

location /threads/ {
    rewrite ^/threads/(.*)\.\d+/?$ /t/$1 permanent;
}

لا أرى كيف يمكن أن ينجح ذلك بما أن nginx لا يعرف معرفات المواضيع الجديدة. يجب تحويل المعرفات /threads إلى معرف موضوع Discourse.

إذا قمت بالاتصال بـ /threads/name.1234 فسيتم إعادة كتابته إلى /t/name ثم يعرض لي المنشور الصحيح، لا يتم استخدام المعرف في تلك اللحظة، لقد اختبرت ذلك للتو.

ربما فقط عندما تكون محظوظًا ويقوم Discourse ومنتدى القديم الخاص بك بإنشاء نفس الـ slugs (ولا يبدأ الـ slug برقم)، ولكن هذا على الأرجح جيد بما فيه الكفاية.

إذا كنت ترغب في تغيير NGINX كما تقترح، يمكنك إلقاء نظرة على قالب الويب في discourse_docker لمعرفة كيفية تغيير تكوين nginx داخل الحاوية. إليك مثال:

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

شكرا جزيلا، أعتقد أن هذا سيكون كافياً للتشتيت

هل يجب أن أقوم بهذا التغيير مع كل تحديث؟

لا. ستضيف ذلك إلى app.yml الخاص بك وسيتم تطبيقه عند كل إعادة بناء.

لتوفير الوقت في الاختبار، قد تقوم بما يلي:

cd /var/discourse
./launcher enter app
apt update
apt-get install -y vim nano

ثم استخدم vim أو nano لتعديل أي شيء تريد رؤيته للتأكد من أنه يفعل ما تعتقده (واحفظ 10-20 دقيقة لكل إعادة بناء). يمكنك إعادة تشغيل nginx باستخدام sv restart nginx.

لم يتم اختبار أي مما سبق، ولكن يجب أن يكون قريبًا.

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

شكراً للمساعدة، لقد قمت بتعديل إعدادات nginx وهي تعمل كما هو مطلوب.

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

أين في ملف app.yml يجب كتابة هذا حتى يتم تعديل nginx تلقائيًا؟ في منطقة التشغيل للأوامر المخصصة؟

لأن (\u003cunknown\u003e): تم العثور على حرف هروب غير معروف أثناء تحليل قيمة مقولبة إذا أضفت هذا:

  - replace:
      filename: "/etc/nginx/conf.d/discourse.conf"
      from: "# auth_basic_user_file /etc/nginx/htpasswd;"
      to: "# auth_basic_user_file /etc/nginx/htpasswd;

      location /threads/ {
          rewrite ^/threads/(.*)\.\d+/?$ /t/$1 permanent;
      }"

ألق نظرة على إعداد Let’s Encrypt مع نطاقات/إعادة توجيهات متعددة واستخدم نفس النوع من الأشياء الموجودة في هذا المثال الذي يضيف إلى تكوين nginx.
يمكنك وضعه في خطاف after_ssl (الذي ستضيفه) كما في ذلك المثال.

ما زلت أحصل على نفس الخطأ، أعتقد أن الأمر يتعلق بالتنسيق الخاص بي.

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