الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

درس : apache و mode rewriting ( رقم 1 )

مغلق
بدأه shreef في 20 فبراير 2006 · 22 رد · 4,897 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

هذا الدرس بسيط و خفيف و هام فى نفس الوقت

و هو يعتمد على اعدادات سيرفر اباتشى فسيكون التعامل عبر ملف سنطلق عليه اسم .htaccess

لكن قبل البدء فى النقاش وجب على ان اوضح المقصود مما سنفعله و بعض من الأسباب التى دفعتنا الى هذا

و سنأخذ كمثال للغات برمجة المواقع الديناميكية لغة php

فعندما نتصفح احد هذه المواقع نجد عناوين او بالأصح URLs الصفحات كهذا المثال

http://www.test.com/index.php?s=526&id=flash

للتوضيح : كلاً من s و id متغيرات داخل الصفحة index.php تم تمريرها عبر الـ URL لتنفيذ قيمها

و هذا ما نريد تغييره لأسباب منها

1 - محركات البحث مثل جوجل تضع تقييم اقل لمثل هذه الـ URLs لأنها تعتبر مضللة و تعيق عملية البحث السليم.

2 - هذه العناوين صعبة و غير عملية بالنسبة للمستخدم العادى .

عموما لنبدء الأن قم بعمل ملف جديد بإسم htaccess.

ضع به هذا الكود

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !-f
RewriteRule /*^s-([0-9]+)/([0-9A-Za-z]+).html  index.php?s=$1&id=$2

فى السطر الرابع :

/*^s-([0-9]+)/([0-9A-Za-z]+).html

دى عبارة عن جملة regular expretion

يمكنك التلاعب بها كما تريد لو لديك الخبرة - ( هذه النقطة مفيدة فى التأمين )-

index.php?s=$1&id=$2 هنا ستكون قيمة المتغير s تساوى 1$

و عند التطبيق سيتم استبدال 1$ بما يطابق ([0-9]+)

و نفس ما حدث يتكرر مع id التى ساويناها مع 2$

و عند التطبيق سيتم استبدال 2$ مع ما ينطبق عليه الشرط ([0-9A-Za-z]+)

بحيث لو كان URL الصفحة هو www.test.com/index.php?s=254&id=flash

سيكون بعدها بهذا الشكل www.test.com/s-254/flash.html

....................................................................................

ملاحظات :

ضع ملف htaccess. فى نفس المجلد الحاوى للملف المنفذة عليه العملية ( فى المثال كان الملف هو index.php )

regular expretions : هى اسلوب او وسيلة لعمل قوالب حرفية --- اى ان اكون بها مقياس لشكل و ترتيب مجموعة من حروف

كما فى هذا المثال البسيط

(+[9-0])-s^ معناها ان اول حرف يجب ان يكون s و ذلك لأن سبقتها العلامة ^ ثم ثانى حرف هو الرمز - ( dash )

ثم يليها اى رقم من 1 الى 9 و علامة + ( plus ) تفيد بأن الرقم من الممكن ان يتكرر مرة او اكثر

*** بالطبع يمكنك البحث اكثر عن regular expretions لتعرفها بالتفصيل ***

الموضوع ليه بقية بس فى وقت اخر إن شاء الله

رجاء المشاركة بسؤال او اقتراح او تعديل او مناقشة و ليس مجرد كلمة شكرا

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#2

السلام عليكم ..

موضوع جميل أوى بس فيه مدخلة صغيرة أوى :D

علشان الــ mod_rewrite يشتغل لازم يكون فى الوضع Enable فى سيرفر الأباتشى ..

لو الــ Mod_rewrite على الوضع Disable لازم نقوم بتحريره عن طريق فتح ملف httpd.conf

#LoadModule rewrite_module
modules/mod_rewrite.so
#AddModule mod_rewrite.c

لو علامة الــ # موجودة يبقى الــ Module فى حالة الــ Disable و نقوم بتفعيله عن طريق مسح أو إزالة علامة الــ# من السطرين ..

LoadModule rewrite_module
modules/mod_rewrite.so 
AddModule mod_rewrite.c

و لك جزيل الشكر ياباشا على المقالات الحلوة ديه ..

Life is not the amount of breaths you take, it's the moments that take your breath away

#3

الله ينور عليك يا فؤاد باشا

هى دى المشاركات ;)

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#4

السلام عليكم اخي احمد موضوع غاية في الاهمية

بس حبيت افهم بعض الاشياء

هل بمجرد كتابة هذا السطر

RewriteRule /*^s-([0-9]+)/([0-9A-Za-z]+).html index.php?s=$1&id=$2

في ملف htaccess الي حبيت ايضاً عن امتداده هل سيكون php او مجرد سوف يكون اسمه هكذا htaccess

سيكون اللنك الي الصفحة

s-254/flash.html

وفي هذا الكود

index.php?s=$1&id=$2 هنا ستكون قيمة المتغير s تساوى 1$

و عند التطبيق سيتم استبدال 1$ بما يطابق ([0-9]+)

هل يجب دائماً ان تكون

([0-9]+)

يابن ادم ولدتك امك باكياً والناس حولك سروراً فعمل لي يوم اذا بكوا في يوم موتك ضاحكاً مسروراً

اطلب اي ملف Testking او كتاب من كتب ميكروسوفت في اي مجال

#5

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

يابن ادم ولدتك امك باكياً والناس حولك سروراً فعمل لي يوم اذا بكوا في يوم موتك ضاحكاً مسروراً

اطلب اي ملف Testking او كتاب من كتب ميكروسوفت في اي مجال

#6
اقتباس
امتداده هل سيكون php او مجرد سوف يكون اسمه هكذا htaccess

لا هو بس htaccess.

كمثال لو قولنا انك طلبت s-254/flash.html فى المتصفح من موقعك, حيقوم الـ apache بترجمة دة الى index.php?s=254&id=flash

و انت حتتعامل عادى جدا داخل كود الـ php بتاعك مع المتغيرات دى

بص لجملة الـ regular expresion

/*^s-([0-9]+)/([0-9A-Za-z]+).html

الجزء دة ([0-9]+) و الذى يليه ([0-9A-Za-z]+)

كل منهم محاط بقوسين ( )

و عند استدعاء القيم الخاصة بهم نستخدم $ و معها ترتيب الجزء دة داخل الـ expresion ككل

مش عارف اوضحها اوى بس معنديش شك فى زكائك

بردو للتوضيح ([0-9]+) اخد 1$ لأنها ظهرت فى الأول

و تلتها ([0-9A-Za-z]+) الى اخدت 2$ و هكذا الرقم يتزايد لو كان فى المزيد

اقتباس
هل يجب دائماً ان تكون

([0-9]+)

لا مش لازم , انت ممكن تغيرها على حسب ميناسبك و تعمل الأشكال الى انت عايزها

بس الفكرة فى انى مثلا اخترت ([0-9]+) هى انى كنت عايز استقبل هنا قيم رقمية فقط و مش عايز حروف

ولو حصل و كان مثلا الـ url بالشكل دة s-ayklam/flash.html (لاحظ استبدلنا الرقم بحروف)

هنا مش حيستوفى شرط ان الجزء الأول بعد -s يكون رقمى

بالتالى مش حيتم تحويله للـ url الصحيح و السيرفر حيبدأ يدور على الملف s-ayklam/flash.html

و مش حيلاقيه و حيطلع رسالة 404 (page not found )

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#7

حلو جدا انا مندهش انه في ناس بعرف زي هيك شغلات كثثثثثثثثثثثير متقدمة.

مرة سويت مشروع بحول

www.mysite.com/item/1234

الى

www.mysite.com/item.php?id=1234

و كان التعرف على Mod_rewrite جميل جدا لانه فعلا اداة قوية.

طبعا احب ان اذكر انه الروابط التي تكون مثل الرابط الاول اعلاه لها مزايا كثيرة و منها

1) افضل و اسهل للحفظ

2) افضل لمحركات البحث... هذه النقطة عليها شوية شرح:

في المواقع المعتادة نرى انه معظمها يستخدم طريقة index.php?page=products

فيأتي المسمى ب Bot بحفظ معلومات الصفحة بعنوان "منتجات" في قواعد البيانات الخاصة به و الصفحة هي index.php لانه لا يقرأ ال GET paramters التي تأتي مع العنوان. فيقوم شخص معين بالبحث عنه فيجد ان صفحة المنتجات للموقع هي index.php و هي الصفحة الرئيسية. انا عن mysite.com/products فهي تمثل Directory او مجلد من المهم ان يقرأها محرك البحث.

سؤال: ما هي فائدة ال +Options لاني لم استخدمها و لم افهم الميزات التي تعطيك اياها؟

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#8

اهلا Maverick منور المنتدى و شكرا على الأضافة المميزة :)

اقتباس
سؤال: ما هي فائدة ال +Options لاني لم استخدمها و لم افهم الميزات التي تعطيك اياها؟

الـ Options بتتحكم فى مجلد من حيث تفعيل صفة من صفات السيرفر فيه ام منعها

و هنا تفاصيلها ِِApacheFreaks.Manual.Conf.Options

هنا جت بس كتأكيد ان FollowSymLinks مفعلة لأن دة شرط ثانى فى ان الـ mode rewriting يشتغل

و لو كانت مفعلة من الأصل فممكن نشتغل من غير السطر دة , بس بيٌفضل كتابته عشان لمة ننقل الشغل من سيرفر لسيرفر تانى منعرفش الـ configurations عليه عاملة ازاى

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#9

شكرا لك شريف

درس رائع و بالفعل يلزم , و بصراحة انا اول مرة بعرف الطريقة دي و دائما كنت ابحث عنها

شكرا لك مرة ثانية

Let's google help you Before ask

--------------------------

My Blog : www.phplover.net

#10

شكرا اخوي شريف

انا لدي فولد فيه عدد من ملفات php هل اضع الملف فيه وهل يقوم بتغير جميع الروابط بدون مشاكل وبدون اي شي غير وضع الملف فقط

ارجوا التوضيح

تم تعديل هذه المشاركة بواسطة مفيدكم في 7 يوليو 2006 في 06:49

#11

اخوي طبقت الدرس ونجحت

لكن المشكله ان الرابط يظهر مايتحول كليا ويظهر وممكن يتحمل منه من موقع ثاني

انا احتاج انه يخفي الرابط بشكل اكبر مجرد رموز غريبه ومايظهر لو كان zip او rar وهكذا تمام لو كنت احمل من هذا الموقع او من مجلة نيوك يطلع id ورقم وهمي بدون اي شي

انا ابغى الرابط يصير مثال

?PHPSESSID=7e071d21146f133367e29c698d960502

زي كذا اي حروف وارقام يخفيه تمام

واتمنى فهمتوني

#12

السلام عليكم

يجماعه أنا جربت الطريقه و منفعتش معايا لعله السيرفر المحلي و لا على السيرفر إلي عليه الموقع

مع العلم إني المود رورايت مفعل هذا ملف ال index.php

<?
$s1=55;
$id1='fasx';
echo"<a href=index.php?s=$s1&id=$id1>test</a>";

echo"<br>";

$id=$_GET['id'];
$s=$_GET['s'];

echo"<br>";
echo $id;
echo"<br>";
echo $s;

?>

و ده ملف .htaccess

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !-f
RewriteRule /*^s-([0-9]+)/([0-9A-Za-z]+).html  index.php?s=$s1&id=$id1

أنا مش فاهم مشتغلتش ليه الرابطه بتقعد زي مهيه مش بتتغير مع إني عامل زي مهو مشروح

في إنتظار ردكم على تساءلي

تم تعديل هذه المشاركة بواسطة shreef في 24 يوليو 2006 في 19:24

#13

للملاحظة فقط موقع رتب يستخدم هذه الطريقة

Let's google help you Before ask

--------------------------

My Blog : www.phplover.net

#14

اه فعلا يا مصطفى فى مواقع كتير دلوقتى بتستخدمها عشان يستفيدوا من مزاياها

انا فاكر كان موقع masrawy.com هو اول موقع عربى كان منفذها على حسب مشفت و الله اعلم و دلوقتى لمة الموضوع اتشهر و اتعرفت فوايده فبقى فى ناس كتير عايزة تعمله و دة جميل

@hmed

تقريبا انت فهمت الموضوع غلط

الـ mode rewrite بيخليك تستقبل urls شكلها مختلف ( انت الى بتحدده ) و لمة بيوصل الـ url دة للسيرفر , بيتم ترجمته لشكله الأصلى , الى انت حاطه فى ملف index.php

دلوقتى انت لمة تكتب فى المتصفح بتاعك :

whatever.com/s-6/something1.html

هو نفسه لمة تكتب

whatever.com/index.php?s=6&id=something1

يعنى الفرق كله على السيرفر مش على المتصفح

ملحوظة فى ملف الـ htaccess بتاعك

index.php?s=$s1&id=$id1

المفروض تبقى

index.php?s=$1&id=$2

دى لاحظتها لكن معرفش فى غلطة تانية او لا

بس مش فاضل غير ان انت تغير الجزء بتاع طباعة الـ url فى ملف index.php الى انه يطبع الـ url بالشكل الجديد

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#15

السلام عليكم

شكرا أخ شريف على الرد طيب عاوز أسأل حضرتك لو ممكن

يعني أنا لو الزائر ضغط على الرابطه التاليه مثلا

www.site.com/index.php?s=5&id=sss

هل المسار في المتصفح يصبح

www.site.com/s-5/sss.html

أم إنه يبقى كما هو

www.site.com/index.php?s=5&id=sss

ولو فيه ملف توضيحي يعني مثال ترفقه مع الرد أكون شاكر ليك

مع العلم إني شاكر ليك في كل الأحوال

ههههههههههههههههههههههههههههه

تحياتي

#16

لا حيفضل زى مهو من غير تغيير فى المتصفح

لأن كل الى احنا بنعمله ليه علاقة بالسيرفر بس

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#17

السلام عليكم

شكرا يشريف على ردك بس في الحاله ده عاوز افهم موقع www.6rb.com عامل إيه بالظبط

يعني القوائم بتاعته كلها shtml وفيه صديق كلم خليفه صاحب الموقع و خليفه بعتله صورة من ال FTP كلها صفحات حقيقية موجوده على السيرفر فهل فيه طريقة إنحنا نعملو إنتاج للقوائم ده و اللنكات بتاعتها

للعلم أنا أبحث عن الطريقه لأني أبرمج في موقع تحميل برامج و أريد إستعمالها يعني الإمتداد في المتصفح يكون كده

www.site.com/p500.html

إلي أنا عاوزه إن المسار إلي يظهر في المتصفح يكون كده

اعمل إيه

تحياتي

#18

الكود الى انت كنت ضايفه كان كدة

<?
$s1=55;
$id1='fasx';
echo"<a href=index.php?s=$s1&id=$id1>test</a>";

echo"<br>";

$id=$_GET['id'];
$s=$_GET['s'];

echo"<br>";
echo $id;
echo"<br>";
echo $s;

?>

المفروض تخليه كدة

<?
$s1=55;
$id1='fasx';
echo"<a href=s-$s1/$id1>test</a>";

echo"<br>";

$id=$_GET['id'];
$s=$_GET['s'];

echo"<br>";
echo $id;
echo"<br>";
echo $s;

?>

كدة الطريقة وضحت على ما اعتقد

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#19

شكرا يشريف على إهتمامك بس عاوز أفهم في www.6rb.com إيه النظام إلي شغالين بيه

شكرا

#20

قبل شهرين كنت كاتب درس خفيف عن Mod_rewrite في قسم الـيونكس هنا، واليوم بعدما قمت ببحث لأجد الموضوع، وجدت أن الأخ شريف قد سبقنيبهذا الدرس :D المرة القادمة يجب علي البحث قبل كل شيء..

لي تعليق بخصوص الـسطر

RewriteRule /*^s-([0-9]+)/([0-9A-Za-z]+).html  index.php?s=$1&id=$2

أرى أن لا داعي من هذا /* ويستحسن حذفه، واذا تم الإبقاء عليه فهذا يعني لا داعي للرمز ^ لان الحرف s لم يعد في البداية، حيث أن البداية هي لـ / المكررة عدد صفر من المرات أو اكثر.

ايضا بدل كتابة 0-9 ممكن نكتب \d وكذلك بدل a-zA-Z ممكن نكتب \w

ايضا مهم بعد نهاية العملية تضع [L] حتى تنهي عملية الـrewrite، لانك اذا لم تنهيه فستتم العملية وربما يحدث rewrite آخر على الـurl بسبب الأسطر الي تحته

والشكل النهائي سيكون هكذا

RewriteRule ^s-(\d+)/(\w+).html  index.php?s=$1&id=$2 [L]

إذا نفعتك أحد مشاركاتي فأدع بظهر الغيب لوالداي بالصحة والسلامة والسعادة وطول العمر وأن يكون هذا زيادة لهما في كل خير.

post-21836-1257612765.gif

before asking: smart questions how-to

#21

السلام عليكم

شكرا eech55 :)

اقتباس
أرى أن لا داعي من هذا /* ويستحسن حذفه، واذا تم الإبقاء عليه فهذا يعني لا داعي للرمز ^ لان الحرف s لم يعد في البداية، حيث أن البداية هي لـ / المكررة عدد صفر من المرات أو اكثر.

الحتة دى كنت قريت عنها فى sitepoint.com قبل كدة , على ما اتذكر ان كان فى مشكلة (أو حالة خاصة, مش فاكر بالضبط) كان الاباتشى فيها بيحتاج انك تعرف الـ slashes الى فى الأول فى الـ regex بتاعك, بس من حيث أنى مش فاكر المشكلة نفسها كانت أيه فأنا بردو شايفها دلوقتى على انها ملهاش لازمة.

اقتباس
ايضا مهم بعد نهاية العملية تضع [L] حتى تنهي عملية الـrewrite، لانك اذا لم تنهيه فستتم العملية وربما يحدث rewrite آخر على الـurl بسبب الأسطر الي تحته

تمام

على فكرة اسلوبك سهل فى الشرح و أنصح الى مفهمش الدرس هنا انه يقرى درسك هنا . ;)

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#22

شمكور أخي شريف سؤال بسيط ما شاء الله الشباب ما تركو اسئلت

هل ممكن تطبيق هذه العمليات على localhost و هل يوجد ادوات لتحرير ملف htaccess.

#23
RedMan كتب:
هل ممكن تطبيق هذه العمليات على localhost و هل يوجد ادوات لتحرير ملف htaccess.

مش مشكلة انت بتطبقها فين طالما انك بتستخدم apache web server (الدرس دة اتكلم عن طريقة تنفيذها على apache فقط).

و بالنسبة لأدوات تحرير ملف htaccess. , أنا بستخدم أى text editor عادى , و معرفش لو فى tools تانية ممكن تساعد فى حاجة زى كدة.

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

هذا الموضوع مغلق.

مواضيع مشابهة