كيفية استبعاد URLs محددة في إعادة توجيهات .htaccess
إدارة إعادة توجيه URLs بكفاءة أمر بالغ الأهمية لأي تطبيق ويب، خاصةً أحد التطبيقات المبنية على أطر مثل CakePHP. ومع ذلك، قد تكون هناك حالات ترغب فيها في عدم تأثر بعض الأدلة أو URLs بقواعد إعادة التوجيه الخاصة بك. سيساعدك هذا المدونة على إعداد ملف .htaccess
الخاص بك لاستبعاد URLs محددة من إعادة التوجيه. إليك كيفية القيام بذلك بفاعلية.
فهم المشكلة
عند تكوين ملف .htaccess
الخاص بك، عادةً ما تقوم بإعداد توجيهات لإدارة كيفية إعادة كتابة URLs. على سبيل المثال، في إعداد CakePHP التقليدي، يتم توجيه كل طلب وارد إلى تطبيقك إلى app/webroot/index.php
، والذي يحدد بعد ذلك أي وحدة تحكم وإجراء يجب استدعاؤه. ومع ذلك، يمكن أن يؤدي ذلك إلى مشاكل إذا كان لديك موارد ثابتة أو أدلة أخرى لا تريد معالجتها بهذه الطريقة.
على سبيل المثال، إذا كانت بنية ملفاتك تضم:
/appRoot/.htaccess
app/
static/
مع قواعد أساسية مثل هذه:
RewriteBase /appRoot
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
سيتم توجيه كل طلب إلى /appRoot/*
إلى app/webroot/index.php
، وهو ما ليس مرغوبًا دائمًا. قد تحتاج إلى استبعاد مجلدات مثل static/
من إعادة الكتابة.
الأسلوب الشائع لاستبعاد URLs
قد يتضمن أحد الأساليب للقيام بذلك الأسطر التالية في ملف .htaccess
الخاص بك:
RewriteCond $1 ^(static|otherDir).*$ [NC]
RewriteRule (.*) - [L]
على الرغم من أن هذا قد يبدو بسيطًا، فإنك قد تخاطر بـ تخطي الطلبات الشرعية الموجهة لتطبيق CakePHP الخاص بك. يحدث هذا لأن شرطك يتطابق عن غير قصد مع جميع الطلبات التي يجب معالجتها بواسطة وحدة تحكم Cake.
الحل: تصحيح قواعد إعادة الكتابة
لتجنب هذه المشكلة، تحتاج إلى مراجعة قواعد إعادة الكتابة للتأكد من استبعاد الأدلة المحددة فقط. إليك حل فعال:
الخطوة 1: استبعاد الأدلة المحددة
يمكنك استخدام قاعدة مثل التالية لاستبعاد الأدلة بشكل صحيح:
RewriteRule ^(static|otherDir).* - [NC,L]
الخطوة 2: ضمان معالجة الطلبات الأخرى بواسطة CakePHP
مع هذا الاستبعاد في مكانه، يمكنك الآن إعادة توجيه جميع الطلبات الأخرى بأمان إلى تطبيق CakePHP الخاص بك بهذه الطريقة:
# سيتم توجيه جميع الطلبات الأخرى إلى Cake
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
مثال على تكوين كامل لـ .htaccess
إليك ما قد يبدو عليه التكوين النهائي في ملف .htaccess
الخاص بك:
RewriteEngine On
# استبعاد أدلة محددة من إعادة الكتابة
RewriteRule ^(static|otherDir).* - [NC,L]
# توجيه جميع الطلبات الأخرى إلى تطبيق CakePHP
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
الخاتمة
من خلال اتباع شروط إعادة الكتابة المحددة هذه، يمكنك إدارة أي URLs يتم إعادة توجيهها وأيها لا يتم، متجنبًا المشاكل المتعلقة بمنطق تطبيقك. تذكر أن الاختبار المناسب أمر حاسم بعد إجراء التغييرات للتأكد من أن كل شيء يعمل كما هو متوقع.
مع هذه القواعد المُحسّنة، يجب أن يتعامل تطبيق CakePHP الخاص بك الآن بشكل صحيح مع أدلة معينة دون أي إعادة توجيه غير مقصودة.