متابعة النقاش من سلوك إعادة كتابة مسار URL في Discourse يفشل بسبب المجلد الفرعي:
أواجه نفس المشكلة تمامًا المذكورة في الموضوع السابق، حيث يتم إعادة كتابة URL فقط في الحالات التي يكون فيها بداية المسار الفرعي مساويًا للمجلد الفرعي. أنا أستخدم /f كمجلد فرعي، وأنا أدرك تحذيرات ومشاكل هذا الإعداد، لكن كل شيء آخر يعمل بشكل جيد، لذا أود الحصول على مساعدة في إصلاح هذه المشكلة إذا أمكن.
أنا لا أستخدم مسارًا موجودًا في Discourse، ولكن إذا كان المجلد الفرعي المكون من حرف واحد يمثل مشكلة، فأود محاولة إصلاحه قبل التفكير في إعداد مختلف.
بعض المسارات التي يتم إعادة كتابتها:
/f/t/food-chain-magnate/4826→/f/tood-chain-magnate/4826/f/tag/food-chain-magnate→/f/tagood-chain-magnate/f/u/renato/follow/following→/f/u/renatoollow/following/f/u/fred/summary→/f/ured/summary
بما أن إعادة الكتابة تتم من جانب العميل، فإن استدعاء نفس الروابط عبر CURL يعمل بشكل جيد.
إليك هذا الالتزام الذي أصلح المشكلة في الأصل، لكن getURL تغير لاستخدام دوال get-url بدلاً من Discourse.BaseUri.
عند تتبع استدعاءات getURL، يكون location.pathname صحيحًا في الاستدعاء الأول (يبدأ بـ /f)، لكن في أحد الاستدعاءات التالية يتم إزالة المجلد الفرعي ويصبح /t/f-started-slug/id، مما يتسبب في أن يعمل هذا الاستبدال على ذلك /f.
لا أعرف بما يكفي عن البنية الداخلية لـ Discourse لفهم مكان حدوث هذه إعادة الكتابة تمامًا، لكن عند الاختبار في نسختي، يبدو أن إجبار الاستبدال في withoutPrefix على العمل فقط في بداية path يحل المشكلة.
// تغيير ...
return path.replace(rootURL, "");
// إلى شيء مثل ... (بافتراض أن rootURL لا يحتاج إلى هروب)
return path.replace(new RegExp("^" + rootURL), "")
// أو بدون تعبيرات نمطية ...
return path.indexOf(rootURL) === 0 ? path.slice(rootURL.length) : path;
لا أعرف ما إذا كان ذلك سيكون إصلاحًا ممكنًا أو إذا كان سيؤدي إلى أي تدهور، أي مساعدة مقدرة.