إزالة العنوان من الرابط يكسر الروابط

All three of the following links are to the second post in this topic. However, only the first two work. The third one worked until very recently, and we use it pretty extensively in our community to avoid cluttering wiki posts that reference several posts within the topic. That third link now just loads endlessly and never actually shows the content.

[full title link](https://meta.discourse.org/t/link-to-post-within-same-topic-doesnt-work-if-there-is-no-title-in-the-url/121455/2)
full title link

[short title link](https://meta.discourse.org/t/short/121455/2)
short title link

[no title link](https://meta.discourse.org/t/121455/2)
no title link


P.S. Sorry about not using try.discourse.com earlier. I’ll create an account over there for next time.

Second post to demonstrate the bug.

What you’re actually using there is a hack, especially if it is a deep link to a specific post. This is the correct permalink URL form

https://meta.discourse.org/t/{title}/{topic-id}/{post-id}

This has been hacked up to work, when people accidentally omit the topic ID, we guess that if the “topic title” is all numeric, they meant the topic ID:

https://meta.discourse.org/t/{topic-id}

So this works

https://meta.discourse.org/t/121455

but this cannot, for what I hope are obvious reasons

https://meta.discourse.org/t/topic-title

But adding the post number to that is riskier.

I recommend not relying on sort of hacky undocumented behaviors, though, and switching to this formally supported form

https://meta.discourse.org/t/x/121455/2

The third link does work if you open it in a new tab. It’s only when you click within one tab that it breaks. And it breaks bad - you can’t even click the logo to go back to the front page of the forum.

TypeError: Cannot read property 'get' of undefined
    at n.setupController (application-779d3dc401b01d1322f0bf8b26cb0e5f4c83a62f26cbecbd52159a94370dffc3.br.js:68)
    at n.a.setup (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:8)
    at i (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.routeEnteredOrUpdated (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.setupContexts (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.finalizeTransition (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17
    at f (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at T (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at E (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)

Error while processing route: topic.fromParams Cannot read property 'get' of undefined TypeError: Cannot read property 'get' of undefined
    at n.setupController (https://d11a6trkgmumsb.cloudfront.net/assets/application-779d3dc401b01d1322f0bf8b26cb0e5f4c83a62f26cbecbd52159a94370dffc3.br.js:68:14673)
    at n.a.setup (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:8:6889)
    at i (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:23930)
    at u.n.routeEnteredOrUpdated (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:24069)
    at u.n.setupContexts (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:23260)
    at u.n.finalizeTransition (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:22253)
    at https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:21378
    at f (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:29538)
    at T (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:30915)
    at E (https://d11a6trkgmumsb.cloudfront.net/assets/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17:30814)

Uncaught TypeError: Cannot read property 'cancelFilter' of undefined
    at n.deactivate (application-779d3dc401b01d1322f0bf8b26cb0e5f4c83a62f26cbecbd52159a94370dffc3.br.js:68)
    at n [as deactivate] (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:10)
    at n.a.exit (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:8)
    at u.n.setupContexts (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.getTransitionByIntent (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.transitionByIntent (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.doTransition (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at u.n.intermediateTransitionTo (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:17)
    at n.s.intermediateTransitionTo (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:8)
    at n.a.intermediateTransitionTo (ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.br.js:8)

Yep, it’s being treated like a permalink redirect and they’re not supported for internal links.

Unfortunately we had no way of knowing that this wasn’t officially supported behavior. As far as we were concerned, it worked. So we used it. I’ll try to let people know not to use that approach from now on, but unfortunately that doesn’t help us now when we have hundreds of these floating around.

As @Dannii said, it only breaks when it’s clicked to load in the same tab, and pretty badly. Even if it’s only really supported for when people do this by accident, doesn’t that still mean it should be fixed? Especially since it works when the topic is different.

يمكنك البحث في منشوراتك عن عناوين URL تطابق تعبيرًا نمطيًا (regex). حسب علمي، كل ما تحتاجه هو تحديد أي شيء في حقل العنوان؛ لا يشترط أن يكون العنوان الفعلي، لكن يجب إدخال شيء ما فيه.

يمكنك تحديد أي شيء للعنوان، نعم. لكن الأمر ليس بسيطًا مثل العثور على منشوراتي. لقد أصبح من الممارسات الشائعة لدى جزء من مجتمعنا إزالة العنوان بالكامل لتجنب عناوين URL الطويلة. لذا سيتعين على عدة مستخدمين إصلاح جميع روابطهم.

لماذا تم نقل هذا إلى قسم الدعم؟ إن دوران الصفحة إلى ما لا نهاية هو بوضوح خطأ برمجي، حتى لو لم يؤدي الإصلاح إلى عودة عمل عناوين URL الخالية من العناوين. كما أن عملها أحيانًا (روابط إلى منشورات مختلفة؛ الوصول المباشر عبر عنوان URL في شريط العناوين) وعدم عملها في هذه الحالة بالتحديد لا يبدو منطقيًا في رأيي.

بما أن الأمر يتطلب إصلاحًا بسبب استخدام غير مقصود، فإن هذا لم يكن أبدًا شيئًا مدعومًا. الخطأ هو ميزة وظيفية توقفت عن العمل، وهو ما لا ينطبق هنا.

لقد قمت أيضًا بتحديث العنوان ليعكس ما حدث فعليًا هنا؛ فالروابط لا تُنشأ دون عنوان، وقد نشأ هذا الموقف لأن الروابط إما أُدخلت يدويًا أو حُذف عناوينها. إن منصة Discourse ليست مصدر المشكلة بأي شكل من الأشكال لتُعدّ عيبًا في Discourse.

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

لست مسؤولًا، لذا للأسف لا يمكنني القيام بذلك.

إذن هل من المقبول أن تظل الصفحة تدور إلى الأبد؟ حتى إعادة التوجيه إلى صفحة 404 ستكون أكثر منطقية من ذلك.

لكن هذا لن يحل مشكلتك، أليس كذلك؟

على المدى الطويل، يحتاجون إلى إصلاح روابطهم، لأن ما كانوا يفعلونه كان في الأساس حيلة غير مدعومة.

كما قلت، فإن استخدام معرف الموضوع فقط هو بالفعل شكل مدعوم رسميًا (لتغطية حالة “أوه، نسيت العنوان”)، لكن معرف الموضوع بالإضافة إلى معرف المنشور ليس كذلك.

ما رأيك يا @eviltrout فيما يجب أن يكون عليه السلوك (انظر الرابط الثالث في المنشور الأول)؟

أوه، هذا مثير للاهتمام. ما هو المنطق وراء معاملة كل منهما بشكل مختلف؟ أليس من الممكن أن ينسى الناس العنوان لكنهم يهتمون بمنشور محدد؟

إنها خدعة قبيحة إلى حد ما، لأننا نتعامل مع النص كأرقام. في جوهرها، هي «صمام أمان» من نوع «واو، المستخدم في حيرة شديدة، يبدو أننا سنقوم بأفضل ما يمكننا». لم يُقصد بها أن تكون طريقة تنقل أساسية يعتمد عليها الناس، خاصة بمجرد أن تصبح معرفات المنشورات جزءًا من المعادلة.

هل يحدث الكشف فقط عند النقر على الرابط؟ هل يمكننا اكتشافه عند إنشاء المنشور وتطبيق فئة على أي روابط مشوهة أو غير صحيحة؟

إذا كان هذا الأمر بهذه الأهمية لمجتمعك، فلماذا لا يناقش المدراء هنا؟ إنهم هم الذين سيحتاجون في النهاية إلى تطبيق أي إصلاحات.

من المثير للاهتمام أن الجانب الخادم يتعامل مع هذه الحالة. يوجد مسار محدد لـ /t/:topic_id/:post_number.

يحدث التطابق فقط عندما يكون topic_id و post_number أرقامًا. في هذه الحالة، سيقوم بالبحث عن اسم الموضوع الصحيح وإعادة التوجيه إليه.

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

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

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

هنا، تحقق من لعبتي الجديدة!

ليس حقًا، حيث يمكنك الضغط على زر الرجوع.

هل ترغب في تعيين هذه المهمة لشخص ما @eviltrout؟

لا يعمل لدي…

بعد النقر على رابط سيء، تتوقف جميع العناصر التالية عن العمل:

  • النقر على زر الرجوع في المتصفح
  • النقر على الشعار
  • النقر على عنوان الموضوع
  • البحث
  • النقر على “الأحدث” أو “غير المقروء” أو “الوسوم” وما شابه من قائمة الهامبرغر

الشيء الوحيد الذي وجدته يعمل هو النقر على إشعار. أو تحديث الصفحة.