سؤال

أقوم بتطوير إطار MVC في PHP من نقطة الصفر ؛ في الغالب لتجربة التعلم ولكن هذا يمكن أن ينتهي بسهولة في مشروع مباشر. ذهبت من خلال هذا درس تعليمي كقاعدة وقد توسعت من هناك.

يتم تقديم الطلبات مثل هذا:

أمثلة على سبيل المثال

وهذا هو ملف .htaccess الخاص بي:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

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

لديّ وحدة تحكم فهرس مع إجراء فهرس ، والذي من المفترض أن يكون الصفحة الرئيسية لموقعي. يمكنني الوصول إليها عن طريق الانتقال إلى acmentSiteSite.com (نظرًا لأن جزء الفهرس يفترض). يحتوي على بعض الصور ، ورابط إلى ورقة الأنماط ، وبعض البرامج النصية. وهي مرتبطة بالمسارات بالنسبة إلى index.php. اعتقدت أن هذا سيكون على ما يرام لأن كل طلب انتقل إلى index.php وجميع المحتوى يتم تضمينه ببساطة في هذه الصفحة باستخدام PHP. هذا يعمل إذا ذهبت إلى acmentSiteite.com. سأرى جميع الصور والأنماط ، وستقوم النصوص بالتشغيل. ومع ذلك ، إذا ذهبت إلى Assectionite.com/index ، فقد تم توجيهه إلى الجزء الصحيح من الموقع ، لكن جميع الروابط لا تعمل. هل يعتقد المتصفح أنني في مجلد مختلف؟

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

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

المحلول

تحتاج إلى مسار مطلق ، لأن المتصفحات تقيم المسارات النسبية بالنسبة للطلب الحالي URI (إلا إذا كنت تستخدم العلامة الأساسية ، انظر أدناه). ضع في اعتبارك أن المسار المطلق لا يعني أنك بحاجة إلى تضمين اسم المجال فيه. ببساطة البدء مع القطع المدمرة إلى الأمام يكفي. إنه المسار المطلق بالنسبة للخادم ، إذا جاز التعبير.

لذا:

<img src="/images/bla.gif">

بدلاً من

<img src="images/bla.gif">

... سوف يعمل بشكل جيد.

كما ذكرت ، هناك نهج آخر هو استخدام علامة قاعدة. لكن لأسباب لا أستطيع تذكرها الآن ، أعتقد أنه يوصى بعدم استخدامه. (إذا كان أي شخص آخر يريد أن يتناغم هنا ...)

نصائح أخرى

يجب على صور IMO ، JavaScript ، الأنماط ، والمحتوى الثابت الآخر ليس كن جزءًا من نظام التوجيه. هذا يعني أنك تقوم بتحميل PHP لكل طلب (ضرب الأداء) ، عندما يمكن أن يخدم Apache هذه الملفات على ما يرام.

يتيح .htaccess الخاص بي دائمًا الملفات الموجودة تخطي PHP:

# Files with an extension that exist are served up straight.
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top