صفحة 1 من 3 123 الأخيرةالأخيرة
النتائج 1 إلى 15 من 38

الموضوع: خاصية mod_rewrite - شرح مفصل

  1. #1
    عضو فعال جدا
    تاريخ التسجيل
    Apr 2002
    المشاركات
    2,046

    خاصية mod_rewrite - شرح مفصل



    بسم الله الرحمن الرحيم

    مقدمة
    تسمح لك تقنية mod_rewrite والموجودة في برنامج Apache الشهير بتحويل زوار الموقع من رابط الى رابط آخر دون علمهم ودون تغيير الرابط في المتصفح، هذا يمكنك من تحويل الزائر من رابط الصفحة القديم الى الرابط الجديد مثلاً، كما تسمح لك بإعادة كتابة الروابط بالشكل الذي تريده ويسهل على الزائر وعلى محرك البحث أيضاً فهمها.

    مثلاً، يمكنك استبدال رابط مثل:
    كود:
    http://www.site.com/showCategory.php?catId=34
    بهذا الرابط:
    كود:
    http://www.site.com/category/34/
    والذي يسهل على الزائر فهمه ومعرفة محتواه..

    بالاضافة الى المزايا السابقة لاستخدام تقنية mod_rewrite، فعدم استخدامها ينطوي على عدة عيوب منها:
    1- سهولة معرفة لغة البرمجة المستخدمة في الموقع، وبالتالي إعطاء الفرصة للمخترقين والمخربين بمحاولة اختراق الموقع عن طريق حقن الاستعلامات في الرابط أو اي طريقة أخرى، بالاضافة الى ان التقنية المستخدمة وكيفية سير البرنامج ينبغي أن تظل سرية ومجوبة عن الزوار.
    2- احتواء الرابط على المتغيرات والعلامة "&" والتي تعتبر غير مطابقة للمواصفات القياسية XHTML والتي ينبغي ان يتم معالجتها قبل ادراج الرابط في صفحات مواقع أخرى.
    3- بعض محركات البحث لا تقبل على أرشفة الصفحات التي تحتوي روابطها على علامة ؟ وبالتالي يقل ترتيب الموقع في محركات البحث.

    هنا تظهر أهمية استخدام التقنية mod_rewrite والتي بفضلها يمكننا تحويل هذا الرابط الغير محبوب سيء المنظر الى رابط بهذا الشكل:
    كود:
    http://www.site.com/category/34/
    هل لاحظت الفرق بين الرابطين؟ الرابط الثاني أسهل وقابل للحفظ أكثر كما انه معبر اكثر عن محتوى الصفحة وقابل للأرشفة من محركات البحث.

    كيفية استخدام mod_rewrite
    لكي تستخدم هذه التقنية يجب أولاً أن نشغل هذه الخاصية على السيرفر، ويتم ذلك عن طريق وضع الكود التالي في ملف htacces. في المجلد الرئيسي للموقع، حتى تعمل الخاصية في هذا المجلد والمجلدات المتفرعة منه، والكود هو كالتالي:
    كود:
    RewriteEngine on
    بعد اضافة هذا الكود وتشغيل الخاصية، ينبغي اخبار السيرفر بكيفية التصرف حيال الروابط، وذلك عن طريق تمرير التعليمات له عن طريق الأمر RewriteRule، ويستخدم هذا الأمر كالتالي:
    كود:
    RewriteRule URL1 URL2
    حيث:
    URL1 هو الرابط المراد مطابقته
    و URL2 هو الرابط المراد توجيه الزائر له عند دخوله للرابط الأول

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

    الحل:
    يمكنك حل هذه المشكلة باستخدام mod_rewrite وتوجيه الزوار من الرابط القديم المعروف لديهم الى الرابط الجديد، كالتالي:
    كود:
    RewriteEngine on
    RewriteRule ^old\.html$ new.html
    الكود السابق هو ابسط اكواد mod_rewrite، واليك تفصيله:
    في السطر الأول قمنا بتشغيل الخاصية.
    في السطر الثاني قمنا بتحويل الزائر من الملف old.html الى الملف new.html
    لاحظ ما يلي:
    العلامة ^ تستخدم دائماً للدلالة على بداية الرابط الأول
    العلامة $ تستخدم دائماً للدلالة على نهاية الرابط الأول
    العلامة . (النقطة) لها معنى خاص في التعابير المنتظمة، ويجب أن نخبر السيرفر بأن يعاملها كنقطة عادية لذلك سبقناها بالعلامة \

    طيب بعد اضافة الكود و عند دخول الزائر للصفحة old.html سيتم توجيهه تلقائياً ودون علمه للصفحة new.html، ويبقى عنوان الصفحة في المتصفح مثل ما كان عليه old.html

    ولكن ماذا لو أردنا ان يعرف الزائر أنه قد تم توجيهه لصفحة أخرى؟ ويتغير رابط الصفحة في المتصفح؟
    علينا باستخدام هذا الكود بدلا من الأول:
    كود:
    RewriteEngine on
    RewriteRule ^old\.html$ new.html [R]
    حرف [R] بين القوسين المربعين يعني انه يتم فعلا التوجيه مع معرفة الزائر بذلك...

    حتى الآن فالموضوع بسيط ومفهوم على ما أعتقد.. ولكن في اغلب الأحوال نحتاج الى بناء كود معقد، ففي الغالب لا نعرف اسم الملف الموجه ولا الموجه اليه، واذا عرفناهم فهم كثير ونريد ان نضع قاعدة عامة يتم التوجيه بناءاً عليها، أيضاً نود تمرير المتغيرات بطريقة GET ..
    هنا تأتي الحاجة لاستخدام التاعبير المنتظمة REGULAR EXPRESSIONS

    mod_rewrite والتعابير المنتظمة (Regular Expressions)
    نصل الآن الى الجزء المهم، وهو المفيد فعلا والمستخدم بكثرة في هذه الخاصية، فهو مفيد وشيق بقدر ماهو معقد، لذا يلزم التركيز جيداً والانتباه في هذه الجزئية.
    فيمكنك باستخدام التعابير المنتظمة اخبار السيرفر بان يقوم بتحويل أي رابط يطابق الصيغة التي تكتبها الى رابط آخر، واليك هذا الكود:
    كود:
    RewriteRule ^products/([0-9][0-9])/$ /productInfo.php?prodId=$1
    فيقوم هذا الكود بمطابقة أي رابط يبدأ بـ "products/" ويتبعها رقمين ثم العلامة "/"، فعلى سبيل المثال يعمل هذا الكود عند كتابة الرابط
    http://www.site.com/products/29/
    أو الرابط http://www.site.com/products/62/
    ويوجهه الى الصفحة http://www.site.com/productInfo?prodId=29
    أو http://www.site.com/productInfo?prodId=62 على التوالي.

    واليك تفصيل الكود السابق:
    بالنسبة للشطر الأول:
    كود:
    ^products/([0-9][0-9])/$
    ^ تدل على بداية الرابط
    $ تدل على نهاية الرابط
    [0-9] تعني اي رقم من 0 وحتى 9، وتكرارها مرتين تعني انه رقم مكون من عددين
    () والأقواس تعني وضع مابينها في متغير يتم استخدامه فيما بعد في نفس السطر

    أما الشطر الثاني
    كود:
    /productInfo.php?prodId=$1
    فهو الرابط الحقيقي الذي سيتم التوجيه له
    والعلامة $1 تعني استخدام المتغير الموجود بين الأقواس () في الشطر الأول في هذا المكان..
    إذاً فهكذا تعمل الأشياء...

    طيب الكود في المثال السابق يوجه الزائر عند كتابة رابط مثل هذا: http://www.site.com/products/62/
    طيب ماذا يحدث لو نسي الزائر كتابة علامة "/" في النهاية؟ الاجابة لن يتم التوجيه وسيحصل الزائر على صفحة خطأ 404

    يمكننا معالجة ذلك عن طريق اجبار السيرفر باضافة العلامة "/" حتى ولو لم يضفها الزائر في نهاية الرابط، كالتالي:
    كود:
    RewriteRule ^products/([0-9][0-9])$ /products/$1/ [R]
    RewriteRule ^products/([0-9][0-9])/$ /productInfo.php?prodId=$1
    لاحظ أننا استخدمنا [R] هنا لاظهار التغيير في المتصفح ولكي يعرف الزائر انه يتحتم عليه كتابة العلامة "/" في نهاية الرابط

    ولكن ماذا لو زاد عدد المنتجات عندنا عن 99؟ ماذا لو اصبحوا 100 او 200 منتج؟
    هل سنضطر لتكرار الكود [0-9] بعدد المنتجات المتوقعة؟
    الاجابة طبعا لا فيمكنك استخدام الكود التالي للدلالة على أي عدد من الأرقام بعد products/
    كود:
    RewriteRule ^products/([0-9]+)/$ /productInfo.php?prodId=$1
    فالعلامة + تعني او أكثر، يعني رقم واحد أو أكثر..

    إلى هنا تكون قد وصلت الى قدر جيد جداً في تعلم هذه الخاصية...
    طبعا ًمازال هناك الكثير والكثير يمكن عمله بالخاصية .. ولكن نكتفي بهذا القدر كبداية
    واذا اعجبكم الموضوع يمكننا عمل درس ثاني متقدم نستكمل فيه هذه الخاصية المفيدة جداً جداً

    منقول من منتدى PHP





    __________________
    مدونتي
    محمود حسين غير متواجد حالياً


  2. #2


    جَزَاكَ اللهُ خَيْرَاً أَخِيْ مَحْمُوْد ....
    مجهود رائع بارك الله فيك ووفقك ... شرح جداً رائع :nice:

    تحياتي، sBForum





    __________________
    أحمد أبو النصر
    Junior php Developer
    +20166196074
    أحمد أبو النصر غير متواجد حالياً

  3. #3
    عضو فعال جدا
    تاريخ التسجيل
    Oct 2003
    المشاركات
    2,775


    شرح اروع من الرائع
    و إلي المفضلة
    و المستندات و مجلد "PRivate" وفي الرئيسية لدرايف E
    4 اماكن حفظت فيه الدرس عشان مايضيع
    شكرا لك عزيزي القدير mahmoud009





    __________________
    a l g a r e e m
    الغريم غير متواجد حالياً

  4. #4
    عضو فعال
    تاريخ التسجيل
    Jun 2002
    المشاركات
    1,346


    بسم الله الرحمن الرحيم

    ما شاء الله تبارك الله
    درس أكثر من رائع
    وفي انتظار المزيد


    تحياتي





    PHP-Master02 غير متواجد حالياً

  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    May 2006
    المشاركات
    424


    درس جميل جدا

    وقواك الله اخوي mahmoud009 ابدعت فعلا


    ولكن حسب علمي اذا قمت بإستخدام المود رايتر يجب عليك مراعات مسار مجلد الصور .


    وتمنياتي للجميع بالتوفيق





    ابوليالي غير متواجد حالياً

  6. #6


    يعطيك العافية اخ محمود درس رائع من شخص اروع

    شكرا جزيلا





    __________________
    سبحان الله وبحمدة ، سبحان الله العظيم
    ابو عابد غير متواجد حالياً

  7. #7
    عضو فعال جدا
    تاريخ التسجيل
    Apr 2002
    المشاركات
    2,046


    جَزَاكَ اللهُ خَيْرَاً أَخِيْ مَحْمُوْد ....
    مجهود رائع بارك الله فيك ووفقك ... شرح جداً رائع

    تحياتي، sBForum
    شرح اروع من الرائع
    و إلي المفضلة
    و المستندات و مجلد "PRivate" وفي الرئيسية لدرايف E
    4 اماكن حفظت فيه الدرس عشان مايضيع
    شكرا لك عزيزي القدير mahmoud009
    بسم الله الرحمن الرحيم

    ما شاء الله تبارك الله
    درس أكثر من رائع
    وفي انتظار المزيد


    تحياتي
    درس جميل جدا

    وقواك الله اخوي mahmoud009 ابدعت فعلا


    ولكن حسب علمي اذا قمت بإستخدام المود رايتر يجب عليك مراعات مسار مجلد الصور .


    وتمنياتي للجميع بالتوفيق
    يعطيك العافية اخ محمود درس رائع من شخص اروع

    شكرا جزيلا
    مشكورين اخواني لمروركم الرائع
    وبخصوص المشكلة التي أشار اليها أخي "ابوليالي"
    طبعا جميع الصور والروابط في الصفحة ستحتاج الى معالجة عن طريق mod_rewrite أيضاً
    كالتالي:

    كود:
    RewriteRule ^products/[0-9][0-9]/(.*)$ /$1 [L]
    RewriteRule ^products/[0-9][0-9]/images/(.*)$ /images/$1 [L]
    تحياتي





    __________________
    مدونتي
    محمود حسين غير متواجد حالياً

  8. #8
    عضو نشيط جدا
    تاريخ التسجيل
    Jun 2006
    المشاركات
    371


    درس اكثر من رائع ومفيد جدا والله يا غالى
    تسلم





    __________________
    DoWnLoAdiZ.OrG
    محاولة للوصول إلى الأعلى
    DoWnLoAdiZ.CoM غير متواجد حالياً

  9. #9
    عضو جديد
    تاريخ التسجيل
    Mar 2007
    المشاركات
    16


    جزاك الله خير

    وشكرا لك





    __________________
    Ye4all.com
    يمن للجميع غير متواجد حالياً



  10. شكرا لك

    بالتوفيق ان شاء الله





    __________________
    ownersınnı
    ALdiraZi BLoOoG | Contact Me | lt.tl - shorten your URL
    owner غير متواجد حالياً

  11. #11
    مُجَاهِد سابقاً
    تاريخ التسجيل
    Apr 2004
    المشاركات
    12,000


    ما شاء الله ..

    درس ممتاز ..





    __________________
    استخدم خاصية تنبيه المشرفين للضرورة وعند ملاحظة موضوع يخالف قوانين منتديات سوالف وسيتم مراجعة الموضوع او المشاركة المبلغ عنها على الفور
    عبد الله هُربي غير متواجد حالياً

  12. #12


    شكرا اخي mahmoud009 على الدرس

    ولكن هناك سؤال يحيرني

    بافتراض انني قمت بتفعيل خاصية الـ mod_rewrite وقمت بتحويل جميع روابط منتداي او موقعي الى روابط مباشرة وتم تعديل جميع الروابط في محركات البحث الى الروابط الجديدة

    ونفترض بعدها انه حدثت مشكلة في هذه الخاصية وتوقفت او مثلا سببت ارتفاع في لود السرفر وتم الاضطرار الى وقفها

    معنى ذلك ان كل الصفحات القديمة الموجودة في محركات البحث سوف تؤدي الى صفحات خطأ 404 وسوف افقدها كلها :con2: ؟؟





    احمد بكير غير متواجد حالياً

  13. #13
    عضو فعال
    تاريخ التسجيل
    Oct 2005
    المشاركات
    1,250


    تم حفظ الدرس ...

    شرح ممتز ويتمنى الجميع دون شك الاكمال حتى النهاية !

    في انتظار الدرس الثاني





    __________________
    اعلانات لوّن - أسعار رمزية جدا

    موقع لوّن- دروس فوتوشوب-خطوط-ايقونات-قوالب-شعارات-فرش و ستايلات فوتوشوب
    ABo.AzAzI غير متواجد حالياً

  14. #14
    عضو فعال جدا
    تاريخ التسجيل
    Apr 2002
    المشاركات
    2,046


    اقتباس المشاركة الأصلية كتبت بواسطة DoWnLoAdiZ.CoM
    درس اكثر من رائع ومفيد جدا والله يا غالى
    تسلم
    الله يسلمك اخي الكريم

    اقتباس المشاركة الأصلية كتبت بواسطة يمن للجميع
    جزاك الله خير

    وشكرا لك
    جزانا واياك أخي الكريم

    اقتباس المشاركة الأصلية كتبت بواسطة the owner
    شكرا لك

    بالتوفيق ان شاء الله
    شكرا لك وبالتوفيق


    اقتباس المشاركة الأصلية كتبت بواسطة مُجَاهِد
    ما شاء الله ..

    درس ممتاز ..
    شكرا لك


    اقتباس المشاركة الأصلية كتبت بواسطة 7alan.com
    شكرا اخي mahmoud009 على الدرس

    ولكن هناك سؤال يحيرني

    بافتراض انني قمت بتفعيل خاصية الـ mod_rewrite وقمت بتحويل جميع روابط منتداي او موقعي الى روابط مباشرة وتم تعديل جميع الروابط في محركات البحث الى الروابط الجديدة

    ونفترض بعدها انه حدثت مشكلة في هذه الخاصية وتوقفت او مثلا سببت ارتفاع في لود السرفر وتم الاضطرار الى وقفها

    معنى ذلك ان كل الصفحات القديمة الموجودة في محركات البحث سوف تؤدي الى صفحات خطأ 404 وسوف افقدها كلها :con2: ؟؟
    اكيد طبعا راح تفقدها الى ان يأرشف جوجل روابطك الجديدة

    اقتباس المشاركة الأصلية كتبت بواسطة ABo.AzAzI
    تم حفظ الدرس ...

    شرح ممتز ويتمنى الجميع دون شك الاكمال حتى النهاية !

    في انتظار الدرس الثاني
    شكرا لك بارك الله فيك





    __________________
    مدونتي
    محمود حسين غير متواجد حالياً

  15. #15


    السلام عليكم اخ محمود
    اولا بارك الله فيك وجزاك كل خير على الدرس الجميل .
    ثانيا اخي العزيز بالنسبة لهذا الامر جنني ولااشتغل او ظبط :

    RewriteRule URL1 URL2

    حطيب امر تشغيل الخدمة في htacces. لكن دون فائدة .. جربت كل شئ ولانفع !!
    هل معقول ان المشكلة من السيرفر ؟

    شكرا لك.
    تحياتي .





    __________________
    والله لن ننساك ياأبا عدي !!!
    المصمم 2005 غير متواجد حالياً

صفحة 1 من 3 123 الأخيرةالأخيرة




ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  
0
موقع مكملات غذائية | نظارات طبية | أضف موقعك هنا