السلام عليكم ورحمة الله وبركاته،
الـ mod_rewrite ، اسم مر عليكم من قبل، أليس كذلك؟
بكل بساطة ، هي أداة للتلاعب في العناوين URLs ، وتعمل عبر إضافة mod_rewrite إلى الخادم أباتشي -apache- ، ولها قواعدها وطرق كتابتها ، وهي تستخدم في نفس الوقت العبارات المنتظمة regular-expression ، كما أن هذه القواعد والشروط يمكن للمستخدم كتابتها في موقعه خاص عبر إدراجها في ملفات .htaccess ، أو عبر مدير الخادم في الملف الرئيسي httpd.conf.
طبعاً هي متوسعة جداً ، ولا يمكن حصرها في مقال واحد ، لذا سأكتفي في هذا المقال بشرح الفكرة الأساسية والقواعد الرئيسية أو المعتادة الاستعمال، وننتهي بعد ذلك بتطبيق مثال بسيط.
لا انسي إن أردنا ذكر تاريخ إضافة الاباتشي (اقصد الـ
mod_rewrite ) فهي كانت من ابتكار
Ralf S.
Engelschall في عام 1996م ثم قدمها كـ هدية إلى مجموعة
أباتشي في عام 1997م
لنبدأ بفتح ملف .htaccess ، ولنرى ماذا يجب أن نكتب (اعلم أن بعض برامج الـ FTP لا تظهر لك أي ملف يبدأ بالنقطة لذلك عليك تفعيل ذلك في البرنامج أو استخدام إدارة الملفات عبر لوحة تحكم الموقع) - ( انتبه : فالنقطة في اسم الملف .htaccess هي في بداية الملف وليس نهايته )
ماذا يعني ما سبق؟
هذه العبارة الأولى التي يجب أن تتعلمها ، وهي تخبر الخادم انه عليه تفعيل محرك الـ rewriting ، لكن لماذا؟
لأنها في الواقع مغلقة بشكل افتراضي ويجب أن يتم تفعيلها في كل ملف تريد أن تصدر مثل هذه الأوامر ، وأحب أن انوه إلى أن بعض الخوادم تعطل هذه الميزة بشكل كلّي ، أي انه حتى مع استخدامك للعبارة السابقة فلن يعمل المحرك.
مممم ، المقصود من العبارة RewriteOptions هي تحديد خيارات معينة وهي تحتمل قيمتين مذكورة بالأعلى:
Inherit : وتعني وراثة الخصائص ، أي إذا وضع ملف الـ .htaccess في مجلد فرعي ، بهذا الخيار سوف يتم وراثة أي خصائص لملفات .htaccess كانت موجودة في المجلد الأب، وتصبح كتابة العبارة بالشكل التالي:
الاحتمال الثاني هو:
MaxRedirects=number : وهي تعني عدد مرات إعادة التوجيه ، وافتراضياً هي 10 ، ومن غير المعتاد أن تكون أكثر من ذلك إلا إن أحببت ، وبالطبع لتغيير ذلك يتم وضع الرقم بدل العبارة number فتصبح بالشكل النهائي :
العبارة الثالثة:
إذا كان لدينا مسار قديم يحمل الشكل التالي:
وكنّا نريد التلاعب بالروابط بحيث نوجد روابط بديلة مختصرة لهذه العملية، ولنفترض أننا نريد أي شخص يأتي من الرابط على الشكل التالي :
بكل بساطة أولا يجب علينا استخدام العبارة التالية:
وهي تعني تحديد المجلد الأساسي الذي سوف يتم التحويل منه، أي إذا كتبنا:
في هذه الحالة أي ملفات تأتي تحت المجلد dir سوف يتم معالجتها حسب الأسطر القادمة،
العبارة الرابعة:
العبارة هي RewriteRule ، وتعود فائدتها حيث أنها تحتوي على الرابط الأصلي الذي سوف يتم فتحه للمستخدم دون ظهور رابطه لأي سبب كان.
هذه العبارة هي العبارة الأهم في الـ mod_rewrite لأنها هي التي تحتوي على الروابط الأصلية والروابط المتلاعب بها.
أولا : ما بين الـ ^ و $ هي العبارة التنكرية التي سوف يستخدمها المستخدم في المتصفح.ثانياً : الجملة الثالثة الغير محاطة بشيء وهي في مثالنا devpedia2.html فهي العبارة التي سوف يتم إعادة توجيه المستخدم لها عند طلب العبارة التنكرية.
مممم ، لنقم الآن بتجربة مثال بسيط لذلك.افتح ملف الـ .htaccess واكتب فيه:
RewriteBase /dir1/dir/2
RewriteRule ^devpedia1.html$ devpedia2.html
وقم بحفظ الملف في المجلد
الآن أي طلب من موقعك على الشكل
سوف يتحول لكن دون أي يظهر التحول للمستخدم إلى العنوان:
نستنتج من السابق ، أننا يجب أن نضع ملف الـ .htaccess في المجلد التنكري، لكن ماذا إذا كنت افترضت أن يكون لديّ العديد من المجلدات التنكرية؟ هل يجب أن أضع ملف .htaccess في العديد من المجلدات؟
بالطبع لا ، حيث يمكنك وضع الـ .htaccess في المجلد الرئيسي بالمحتوى التالي:RewriteBase /dir1/dir/2
RewriteRule ^dir/devpedia1.html$ devpedia2.html
سوف يصبح أي دخول للمسار dir/devpedia1.html يتحول مباشرة إلى الملف devpedia2.html الموجود داخل المسار /dir1/dir/2 .
كما أحب أن انوه إلى انه يمكن اختصار RewriteBase بدمجه بالعبارة أسفل منه ، لكن هو في الأصل مفيد في حالة كان هناك لديك الكثير من الـ RewriteRule وكلها تقع في نفس المجلد فهي تختصر الوقت والجهد.
من الأشياء المهمة في العبارة RewriteRule أنها تتقبل المتغيرات بشكل عبارات منتظمة.