مُقدّمة
سنتعرّف في هذا الدّرس على كيفيّة إعادة كتابة عناوين URL باستخدام وحدة mod_rewrite
الخاصّة بـApache 2. تمنحنا هذه الوحدة حريّة إعادة كتابة روابط URL لتكون أكثر نظافة وتنسيقا عبر ترجمة مسارات قابلة للقراءة إلى استعلامات مُوجّهة لتطبيق الوِب أو إعادة توجيه المُستخدم حسب شروط إضافيّة.
هذا الدّرس مُقسّم إلى جزأين. بحيث نجهّز في الجزء الأول موقعا إلكترونيا بسيطا مع مثال بسيط لإعادة كتابة عنوان URL. يُغطّي الجزء الثّاني مثالين مُعمّقين لأكثر قواعد إعادة الكتابة شيوعا.
المُتطلّبات
لاتّباع هذا الدّرس، ستحتاج إلى:
-
خادوم أوبونتو 16.04 مضبوط باتّباع الخطوات الواردة في درس الإعداد الابتدائي لخادوم أوبونتو، وذلك يشمل مُستخدما ذا صلاحيّات
sudo
مع ضبط مُسبق لتمكينه من تنفيذ مهام إداريّة، غير المستخدم الجذر root، بالإضافة إلى جدار ناري. -
Apache 2 مُنصّب على خادومك باتّباع الخطوة الأولى من درس تثبيت حزم LAMP على أوبونتو.
الخطوة 1 – تفعيل mod_rewrite
أولا، نحتاج إلى تفعيل mod_rewrite
. مبدئيًّا، الوحدة متوفّرة لكنّها غير مُفعّلة عند تنصيب Apache 2.
sudo a2enmod rewrite
سيقوم هذا الأمر بتفعيل الوحدة أو إخبارك بأنّ الوحدة قد سبق تفعيلها. لتطبيق التّغييرات، أعد تشغيل Apache:
sudo systemctl restart apache2
وحدة mod_rewrite
مُفعّلة الآن. سنضبُط في الخطوة التّاليّة ملفّ .htaccess
لاستخدامه لتحديد قواعد إعادة الكتابة لإعادات التّوجيه Redirects.
الخطوة 2 – ضبط htaccess.
يسمح لنا ملفّ .htaccess
بتعديل قواعد إعادة الكتابة دون الحاجة إلى الوصول إلى ملفّات إعدادات الخادوم. لهذا السّبب، فملفّ .htaccess
مُهمّ جدّا لحماية تطبيق الوِب الخاصّ بك. النّقطة في أول الاسم تُشير إلى أنّ الملفّ مخفي.
مُلاحظة: يُمكن لأي قواعد تضعها داخل ملفّ .htaccess
أن توضع كذلك داخل ملفّات إعدادات الخادوم، في الحقيقة، ينصح التوثيق الرّسمي لـApache ينصح باستعمال ملفات إعدادات الخادوم عوضا عن ملفّ .htaccess
لقدرة Apache على مُعالجتها بسرعة أعلى.
مع ذلك، في مثالنا البسيط، الفرق في الأداء لن يكون ملحوظا. بالإضافة إلى أنّ وضع القواعد داخل ملفّ .htaccess
مُريح أكثر، خاصّة إن كان لديك الكثير من المواقع الإلكترونيّة في خادوم واحد. إذ لا تتطلّب التّغييرات إعادة تشغيل الخادوم ولا تحتاج إلى صلاحيّات المُستخدم الجذر Root لتعديل الملفّ، ما يُسهّل إجراء التّغييرات بحساب مُستخدم عاديّ. بعض البرمجيّات مفتوحة المصدر مثل جوملا ، ووردبريس ولارافل تعتمد على ملفّ .htaccess
لإجراء التّعديلات وإضافة قواعد إضافيّة حسب الطّلب.
سنحتاج إلى ضبط وتأمين بعض الإعدادات قبل أن نبدأ.
يمنع Apache مبدئيًّا استخدام ملفّ .htaccess
لقواعد إعادة كتابة روابط URL، لذا سيتوجّب عليك أولا تفعيل إمكانيّة استخدام الملفّ. افتح ملفّ إعدادات Apache المبدئية باستخدام nano
أو مُحرّرك المفضّل.
sudo nano /etc/apache2/sites-available/000-default.conf
ستجد داخل هذا الملفّ الجزء <VirtualHost *:80>
في أول سطر. داخل هذا الجزء، أضف الجزء التّالي مباشرة بعد السطر الذي يبدأ بـDocumentRoot
:
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ليُصبح ملفّ الإعدادات كما يلي (حذفنا - للاختصار - التعليقات، وهي الأسطر التي تبدأ بـ#
من المُقتَطع أدناه). تأكّد من أنّ الإزاحة صحيحة:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
احفظ وأغلق الملفّ.
ملحوظة: يفترض هذا الدليل وجودَ موقع واحد على خادومك، في هذه الحالة يكفي التعديل على ملف المضيف الافتراضي Virtual host المبدئي (000-default.conf
) بالطريقة أعلاه لتفعيل إمكانيّة إعادة التوجيه. إن كان لديك أكثر من موقع فستحتاج لإجراء التعديل أعلاه على ملفّ المضيف الافتراضي الخاصّ بالموقع الذي تريد. توجد ملفات المضيفات الافتراضية على المسار /etc/apache2/sites-available/
.
لتطبيق التّغييرات، أعد تشغيل خادوم Apache:
sudo systemctl restart apache2
الآن، أنشئ ملفّ .htaccess
داخل مجلّد الوب الجذر:
sudo nano /var/www/html/.htaccess
أضف السّطر التّالي إلى أعلى الملفّ لتفعيل مُحرّك إعادة الكتابة Rewrite engine:
RewriteEngine on
احفظ وأغلق الملفّ.
يُمكنك الآن استعمال الملفّ .htaccess
للتّحكم بقواعد المُوجّهات في تطبيق الوِب الخاصّ بك.
الخطوة 3 – ضبط إعادات كتابة روابط URL
سنعدّ في هذه الفقرة إعادة كتابة بسيطة لرابط URL، بحيث نستطيع تحويل عناوين URL جميلة إلى مسارات يُمكن للشفرة فهمها. سنسمح بالخصوص للمُستخدمين بالوصول إلى العنوان http://your_server_ip/about
.
لنبدأ بإنشاء ملفّ باسم about.php
داخل مُجلّد الوب:
sudo nano /var/www/html/about.php
انسخ شفرة HTML التّاليّة إلى الملفّ واحفظه ثمّ أغلقه:
<html>
<head>
<title>About Us</title>
</head>
<body>
<h1>About Us</h1>
</body>
</html>
ملحوظة: تأكّد من أن خادوم الوِب لديه صلاحيات الوصول إلى الملف الذي أنشأته للتو. مثلا، بإعطاء الأذون 755
على مجلد الوِب:
sudo chmod -R 755 /var/www
يُمكنك الوصول إلى هذه الصّفحة على العنوان http://your_server_ip/about.html
، لكن لو حاولت الوصول إلى العنوان http://your_server_ip/about
، فستُلاحظ خطأ 404 Not Found
، إن أردت تمكين مُستخدميك من استعمال هذا العنوان عوضا عن العنوان السّابق (أي دون الجزء .html
) فقواعد إعادة الكتابة كفيلة بتوفير هذه الوظيفة.
تتّبع جميع قواعد الكتابة التّنسيق التّالي:
RewriteRule pattern substitution [flags]
بحيثُ:
-
RewriteRule
يُحدّد التّعليمة. -
pattern
تعبير نمطي Regular Expression يُحدّد عنوان URL المرغوب به، هذا هو ما سيكتبه المُستخدم في شريط عنوان URL. -
substitution
: البدل، وهو مسار عنوان URL الأصلي، (مسار الملفّ الذي يقوم Apache بتقديمه). -
flags
عبارة عن مُعاملات اختياريّة لتعديل آليّة عمل القاعدة.
افتح ملفّ.htaccess
:
sudo nano /var/www/html/.htaccess
بعد السّطر الأول، أضف السّطر الثّاني ممّا يلي:
RewriteEngine on
RewriteRule ^about$ about.html [NC]
في هذه الحالة، المقطع ^about$
هو التّعبير النّمطي، about.html
يُعبّر عن البدل، و [NC]
هي المُعاملات. استخدمنا في هذا المثال عدّة محارف تحمل معان خاصّة:
-
^
يُشير إلى بداية العنوان بعد المقطعyour_server_ip/
. -
$
يُشير إلى نهاية عنوان URL. -
about
المقطع الذي يجب على التّعبير النّمطي مُطابقته. -
about.html
اسم الملفّ الأصلي الذي يصل إليه المُستخدم -
[NC]
خيار لجعل القاعدة تتجاهل حالة الأحرف Case insensitive.
ينبغي الآن أن تستطيع الوصول إلى العنوان http://your_server_ip/about
في مُتصّفح الويب الخاصّ بك. في الحقيقة، بالقاعدة التي كتبناها أعلاه، فالعناوين التّاليّة ستؤدّي جميعها إلى الملفّ about.html
:
-
http://your_server_ip/about
، بسبب تعريفنا للقاعدة. -
http://your_server_ip/About
، لأنّ القاعدة تتجاهل حالة الأحرف. -
http://your_server_ip/about.html
، لأنّ اسم الملفّ الأصلي سيعمل دائما.
العناوين التّاليّة لن تعمل:
-
http://your_server_ip/about/
، لأنّ القاعدة تنصّ بوضوح بأنّه لا يجوز على أي شيء أن يكون بعدabout
باستخدام المحرف$
. -
http://your_server_ip/contact
، لأنّ العنوان لن يُطابق المقطعabout
.
تمتلك الآن ملفّ .htaccess
مع قاعدة بسيطة، يُمكنك الآن تعديله وتوسيعه حسب حاجاتك. سنتعرّف في الجزء الثاني من هذا الدرس على أمثلة إضافية لإعادة كتابة الروابط والتعليمات الأكثر استخداما مع mod_rewrite
.
ترجمة – بتصرّف - للمقال How To Rewrite URLs with mod_rewrite for Apache on Ubuntu 16.04 لكاتبه Mateusz Papiernik.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.