سؤال

باستخدام Restlet كنت بحاجة إلى تقديم بعض المحتوى الثابت البسيط في نفس سياق خدمة الويب الخاصة بي.لقد قمت بتكوين المكون باستخدام ملف Directory, ، ولكن أثناء الاختبار، وجدت أنه سيخدم فقط "index.html"، وكل شيء آخر يؤدي إلى 404.

router.attach("/", new Directory(context, new Reference(baseRef, "./content"));

لذا... http://service و http://service/index.html كلا العملين،

لكن http://service/other.html يعطيني 404

هل يستطيع اي شخص ان يسلط الضوء على هذا؟أريد أن يكون أي ملف داخل دليل ./content متاحًا.

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

هل كانت مفيدة؟

المحلول

حسنًا ، لقد اكتشفت المشكلة.في الواقع، يبدو أن Restlet يقوم بتوجيه الطلبات بناءً على البادئة، لكنه لا يتعامل مع البادئة المطابقة الأطول بشكل صحيح، ويبدو أيضًا أنه يتجاهل امتدادات الملفات.

على سبيل المثال، إذا كان لدي مورد مرتبط بـ "/other"...ودليل على "/".وأطلب /other.html، ما يحدث بالفعل هو أنني أحصل على المورد "/other".(تم تجاهل الامتداد؟)، وليس الملف الثابت من الدليل كما أتوقع.

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

نصائح أخرى

تستخدم أجهزة التوجيه في Restlet بشكل افتراضي وضع المطابقة "Template.MODE_STARTS_WITH".يمكنك دائمًا ضبط الإعداد الافتراضي لجهاز التوجيه عن طريق إجراء router.setMatchingMode(Template.MODE_EQUALS).سيؤدي هذا إلى تشغيل المطابقة الصارمة افتراضيًا للإرفاق.يمكنك اختيار تجاوز المسارات الفردية باستخدام setMatchingMode.

وثائق جيدة حول توجيه Restlet

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top