قد يصادفك يوما ما موقف تكون فيه مجبرا على تثبيت إطار العمل لارافيل Laravel في أحد المجلدات الفرعية Sub folders بالخادم عوض المجلد الرئيسي Root folder كما هو شائع. في هذه الحالة، إذا لم تكن على دراية كاملة ببنية مجلدات لارافيل فسوف تقع في أخطاء قد تكون كارثية على أمن موقعك.
[caption id=“attachment_1318” align=“aligncenter” width=“600”]](/assets/images/laravel-directory-structure.png) بنية مجلدات لارافيل\
المجلد الذي يجب الإنتباه إليه والتركيز عليه جيدا هو “public”، هذا هو المجلد الوحيد الذي بإمكان زوار موقعك الوصول إليه عبر المتصفح، الملفات والمجلدات الأخرى تستخدم من طرف الخادم في الكواليس ولا علاقة للزائر بها، لا يجب عليه الوصول إليها في أي حال من الأحوال.
لنفترض أنك قمت بتثبيت لارافيل بجميع مجلداته وملفاته في مجلد فرعي على موقعك، كما يلي :
site.com/subfolder/public/
الموقع سيعمل بطبيعة الحال ولكن هذه ليست الطريقة العملية لفعل ذلك، فالموقع سيكون معرض لمشاكل أمنية بمجرد الدخول للرابط التالي :
site.com/subfolder/.env
الملف .env حساس وفيه جميع المعلومات المتعلقة بإعدادات قاعدة البيانات وغيرها من المعلومات المهمة للموقع وإذا ما وقعت عليها عين أحد المتطفلين فقد يعبث بها ويسبب لك ولموقعك مشاكل ربما لا يمكن تداركها بعد ذلك.
إذن عليك ألا تدع مثل هذه الملفات معروضة للعموم، بل عليك إما حمايتها بملف .htaccess أو تغيير مكانها وتحويلها للمجلد الرئيسي وهذه أفضل طريقة لحماية موقع مدعوم من لارافيل عند تثبيته في مجلد فرعي. غالبية الإستضافات تضع المجلد الرئيسي في هذا المسار :
/var/www/public_html
لنفترض أننا نريد إنشاء مدونة بواسطة لارافيل داخل الموقع الخاص بنا، المدونة ستكون على الرابط التالي :
site.com/blog/
ما علينا فعل هو إنشاء مجلد blog داخل المجلد الرئيسي public_html ثم ننسخ فيه الملفات الموجودة داخل المجلد public الخاص بلارافيل.
بعد ذلك بنقل جميع المجلدات الأخرى (كل الملفات ما عدا مجلد public) لإطار العمل لارافيل إلى جذر الإستضافة في مجلد نسميه مثلا laravel.
var/www/laravel
يعني أن المجلدان public_html و laravel سيكونان في نفس المستوى.
والشيء الأخير الذي علينا القيام به هو تعديل المسارين التاليين في ملف index.php داخل المجلد blog (الذي نسخنا فيه ملفات المجلد public) كما يلي :
require DIR.’/../../bootstrap/autoload.php’; $app = require_once DIR.’/../../bootstrap/app.php’;
بهذه الطريقة تضمن أن جميع ملفات لارافيل خارج المجلد public ستكون في مأمن ولا يمكن الوصول إليها من المتصفح.