يعد ملف .htaccess ملفاً نصياً، ولكنه من الملفات الهامة جداً التي يمكن أن تضيف الكثير من الوظائف والأوامر للموقع، وفي نفس الوقت فإنه يمكن أن يسبب الكثير من المشاكل وربما توقف الموقع بالكامل عن العمل. ويتواجد هذا الملف في السيرفرات العاملة بنظام Apache، ولكنه يكون مخفياً. والحقيقة أن اسم الملف يبدأ بالنقطة للدلالة على أنه ملف مخفي. ولإظهاره يجب إظهار الملفات المخفية.
ولكن ما هي فائدة هذا الملف؟ وكيف يمكن التعديل عليه لإضافة وظائف أو تعليمات للموقع؟ وكيف يمكن كشف الأخطاء فيه وإصلاحها؟
هذا ما سنتعرّف عليه في هذا المقال المرجعي:
ما هو ملف .htaccess؟ وكيف يمكن العثور عليه؟
هو ملف مؤثر جداً على الموقع والاستضافة، إذ يحتوي معلومات قد تؤثر على السيرفر، لذلك فإنه يكون مخفياً عادةً. من الأمور التي يتحكّم بها هذا الملف:
- عمليات إعادة التوجيه redirects
- أمان الاستضافة
- إعدادات الموقع
يتم التحكّم بهذا الملف وبكامل تعليماته وأوامره من قبل سيرفر الـApache عادةً. ولكن يمكن عرضه للمستخدم (والتعديل عليه) من خلال لوحة التحكم للاستضافة، حيث ستجد الملف في المسار نفسه الذي تتواجد فيه ملفات موقعك عادةً. فمثلاً إذا كنت تستخدم لوحة تحكم cPanel توجه لمدير الملفات File Manager.
سيفتح حينها المسار الأصلي للاستضافة، من خلال Settings اختر عرض الملفات المخفية (أو ملفات dotfiles وهي الملفات التي يبدأ اسمها بنقطة)
ابحث بين الملفات الجديدة عن .htaccess، وانتبه إلى أنه يمكن أن يكون هناك في بعض الحالات أكثر من ملف .htaccess في المجلدات الفرعية لملفات موقعك.
يمكنك أيضاً الوصول لملف .htaccess من خلال FTP كـFileZilla بعد تسجيل الدخول، حيث يمكنك تحميل الملف والتعديل عليه ومن ثم رفع النسخة الجديدة.
يبدو مظهر ملف .htaccess بالشكل التالي:
ما هي استخدامات هذا الملف؟
يمكن أن يقوم هذا الملف بالكثير من الوظائف منها:
- إعادة توجيه الروابط redirects
- إعادة كتابة الروابط rewriting URLs
- إنشاء صفحات أخطاء مخصصة، مثل صفحة 404 مخصصة
- إجبار الموقع على استخدام HTTPS وليس HTTP
- حماية أحد أجزاء الموقع بكلمة مرور
- استخدام prohibiting hotlinks لحماية الصور ذات حقوق الملكية من إعادة النشر في المواقع الأخرى
- تغيير الصفحة الافتراضية الأولى للموقع أو ما يُدعى بـindex page
- الإجبار على تحميل الملف بدلاً من عرضه
- حظر عناوين IP محددة والسماح لعناوين أخرى محددة بالدخول للموقع
- إعادة تكوين إعدادات الحساب
وسنشرح تالياً كيفية القيام بكل ذلك. ولكن بدايةً علينا أن نوضّح بعض النقاط:
لإجراء تعديلات على ملف .htaccess
إذا رغبت بإجراء أي تعديل على ملف .htaccess فيمكنك ذلك من خلال:
- لوحة التحكم من خلال النقر بزر الماوس الأيمن عليه واختيار edit لتعديل الملف بشكل مباشر. أو يمكنك تنزيله والتعديل عليه باستخدام برامج تحرير الكود مثل Notepad++.
- تنزيل الملف باستخدام FileZilla ومن ثم تعديله ورفع النسخة المعدلة.
عند رفع النسخة المعدلة يجب الحرص على أن يكون اسم الملف .htaccess لكي يتعرّف عليه السيرفر.
ولكن قبل إجراء أي تعديل يجب إجراء نسخة احتياطية من الموقع والاحتفاظ بها تحسباً في حال حدوث أي مشكلة. أو يمكن تنزيل النسخة الأصلية من ملف .htaccess لاستعادتها في حال لم تنجح التعديلات التي قمت بها أو في حال رغبت باستعادة الإعدادات الافتراضية.
كما يجب عدم حذف أي تعليمات برمجية من ملف .htaccess لأنها قد تكون ضرورية. كما ينصح بتجنّب حذف هذا الملف ما لم يكن فارغاً أو كنت متأكداً تماماً من أن حذفه لن يؤثر على الموقع.
أما إذا لم تجد ملف .htaccess فيمكنك إنشاء واحد وإضافة التعليمات التي تريدها إليه.
استخدام أكثر من ملف .htaccess
يمكنك تطبيق إعدادات مختلفة على مسارات مختلفة من موقعك من خلال استخدام أكثر من ملف .htaccess واحد. حيث يمكنك -نظرياً- إنشاء ملف .htaccess في أي مسار تريده في السيرفر لتصبح مجموعة الإعدادات مخصصة لهذا المسار. ولكن احرص على:
- استخدام أقل عدد ممكن من ملفات .htaccess لأن كثرة هذه الملفات قد يبطئ من سرعة السيرفر
- عندما يعثر السيرفر على ملف .htaccess في مسار معيّن فإنه يبحث عن أي ملفات أخرى في المسارات الأعلى، وهذا يزيد استهلاك موارد السيرفر
- ملفات .htaccess الموجودة في المسارات الأعلى لها الأسبقية
1. كيفية إعادة توجيه روابط محددة redirects باستخدام ملف .htaccess
اتبع الطريقة المشروحة سابقاً للوصول إلى ملف .htaccess والتعديل عليه.
إذا أردت إعادة توجيه صفحة محددة ضمن الموقع إلى صفحة أخرى موجودة في نفس الموقع، مثلاً إعادة التوجيه من example.com/oldfile.htm إلى newfile.htm فاستخدم إعادة توجيه 301 من خلال إضافة الكود التالي:
Redirect 301 /oldfile.htm /newfile.htm
أما إذا أردت التوجيه إلى موقع (دومين) آخر، مثلاً التوجيه من example.com/oldfile.htm إلى example.net/newfile.htm فاستخدم الكود التالي:
Redirect 301 /oldfile.htm https://example.net/newfile.htm
أما إذا أردت توجيه الموقع بأكمله (مع كل روابطه)، مثلاً إعادة التوجيه من example.com إلى example.net:
RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com [NC,OR] RewriteCond %{HTTP_HOST} ^www.example.com [NC] RewriteRule ^(.*)$ https://example.net/$1 [L,R=301,NC]
لإعادة توجيه روابط محددة تنتهي بلاحقة معيّنة إلى روابط أخرى بلاحقة مختلفة، مثلاً من example.com/file.php إلى example.com/file.htm:
RewriteEngine On
RewriteCond %{REQUEST_URI} .php$
RewriteRule ^(.*).php$ /$1.htm [R=301,L]
كما نعلم فإن إعادة التوجيه 301 هي الأفضل لكي تتمكن محركات البحث من التوجه للروابط الجديدة لموقعك.
2. كيفية إعادة كتابة الروابط rewriting URLs من خلال ملف .htaccess
وهي أشبه بعملية إعادة التوجيه، فهي تحوّل الزائر من URL إلى آخر. وأشهر ما تستخدم هذه الطريقة في إجبار استخدام www أو عدم استخدامها.
حيث تفسر محركات البحث (كغوغل) الرابطين www.example.com وexample.com على أنهما موقعان مختلفان. ويُفضّل اختيار أحدهما واعتماده من قبل صاحب الموقع لكي يعرضه محرّك البحث. وهذه هي الفائدة من هذه الميزة.
Force non-www
عند إضافة هذه التعليمات فإن الزائر الذي يكتب www.example.com للتوجّه لموقعك يحوّل إلى example.com
RewriteEngine on RewriteCond %{HTTP_HOST} ^www.example.com [NC] RewriteRule ^(.*)$ https://example.com/$1 [L,R=301,NC]
Forcing www
عند إضافة هذه التعليمات فإن الزائر الذي يكتب example.com للتوجّه لموقعك يحوّل إلى www.example.com:
RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301,NC]
يمكنك بالطبع إعادة توجيه الروابط من خلال لوحة التحكم cPanel من خلال Redirects، حيث تظهر نافذة كالتالية:
وسنفصّل في جميع أوامر لوحة التحكم cPanel في مقال منفصل.
3. كيفية إنشاء صفحة خطأ 404 مخصصة باستخدام ملف .htaccess
تعد صفحة الخطأ 404 صفحة عادية توجد في كل المواقع وتنبّه الزائر إلى أن الصفحة التي طلبها غير موجودة في الموقع. لا شك أنك لاحظت أحياناً صفحات خطأ 404 مخصصة ذات مظهر ومحتوى مختلف عن بقية صفحات 404. ولكن ما الفائدة من ذلك؟
الفكرة الأساسية هي أن صفحات خطأ 404 هي جزء من الموقع، وهي تعطي غالباً انطباعاً سيئاً لدى الزائر. لذا فإن تحويل هذا الانطباع لإيجابي فهذا سيساهم بتحسين تجربة المستخدم UX، خصوصاً إذا كانت تحتوي زراً لتسهيل انتقال الزائر للصفحة الرئيسية من الموقع أو مربعاً للبحث عن ما يريده. وهذا ما سنقوم به…
بدايةً عليك إنشاء الصفحة المخصصة التي تريدها، فمثلاً إذا كنت تعمل على ووردبريس فيمكنك إنشاء صفحة جديدة وتخصيصها باستخدام أداة بناء المواقع التي تريد، أو يمكنك مثلاً إنشاء الصفحة من خلال كتابة الكود من الصفر. بعد الانتهاء من ذلك احفظ الصفحة ليتم رفعها على سيرفر الموقع.
الخطوة التالية التي سنركّز عليها هي إدراج هذه الصفحة ليعرضها الموقع على أنها صفحة الخطأ 404.
أضف لملف .htaccess الكود التالي:
# serve custom error pages ErrorDocument 400 /errors/400.html ErrorDocument 500 ErrorDocument 404
حيث يمكنك اختيار رقم الخطأ الذي تريده ومن ثم حذف /errors/400.html ولصق مسار الصفحة التي أنشأتها. وهكذا يمكنك إنشاء العديد من الصفحات المخصصة وعرضها بدلاً من الصفحة التقليدية.
بعد الانتهاء من ذلك احفظ الملف وارفعه كما شرحنا سابقاً.
4. كيفية إجبار HTTPS باستخدام ملف .htaccess
إذا أردت أن تحرص على أن كل زائر يستخدم اتصالاً آمناً بشهادة SSL فيمكنك استخدام هذا الملف لإعادة توجيه الزيارات غير الآمنة. حيث يتم إعادة توجيه http://example.com إلى https://example.com. وهذا يعمل بالطبع فقط إن كنت تستخدم شهادة SSL لموقعك.
لإجبار كل الزوّار على استخدام HTTPS استخدم الكود التالي في ملف .htaccess، بالطبع عليك استبدال example بدومين موقعك:
#force SSL on entire site RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/?(.*) https://example.com/$1 [R=301,L]
5. كيفية حماية مسارات محددة من الموقع بكلمة مرور باستخدام ملف .htaccess
قد تحتاج أثناء تطوير وبناء موقعك لحمايته (أو حماية أجزاء منه) بكلمة مرور حتى يصبح جاهزاً للعرض. للقيام بذلك نحتاج لملفين أحدهما يحتوي على أسماء المستخدمين وكلمات مرورهم الخاصة، والثاني هو ملف .htaccess الذي سنضيف فيه تعليمات لطلب اسم المستخدم وكلمة مرور عند محاولة زيارة مسار معيّن. ولكننا سننشئ ملف .htaccess إضافي ونضعه في المسار الذي ترغب بحمايته، أي أننا لن نعتمد على ملف .htaccess الأساسي.
بداية أنشئ ملف كلمات المرور من خلال أي محرر نصوص (مثل برنامج المفكرة التقليدية أو برنامج Notepad++) بحيث يتم كتابة اسم المستخدم ومن ثم : ومن ثم كلمة المرور. ولكن يفضّل استخدام إحدى الأدوات لتشفير هذه البيانات، ولذا يمكنك استخدام الموقع التالي لذلك.
كل ما عليك فعله هو إدخال كل اسم مستخدم وكلمة المرور الخاصة به ومن ثم الضغط على Generate وسينشئ لك الموقع سطراً عليك لصقه في الملف النصي في سطر خاص به.
وهكذا كرر هذه الخطوة لإضافة كل المستخدمين وكلمات مرورهم للملف كما في الصورة:
احفظ الملف الآن بالاسم الذي تريده، سنحفظه نحن باسم .htpasswd. احرص عند حفظ الملف على اختيار All Files.
الخطوة التالية هي رفع هذا الملف إلى سيرفر موقعك، ويُنصح بعدم رفعه إلى أحد المجلدات العامة التي يمكن أن يطلع عليها أي شخص. بل ننصحك مثلاً بإنشاء مجلّد جديد ومنح الأذونات لمشاهدته للمستخدم فقط، ومن ثم رفع هذا الملف إليه. اخترنا نحن المسار التالي:
/newfolder/.htpasswd
والآن علينا إنشاء ملف .htaccess الجديد. بنفس الطريقة أنشئ مستنداً نصياً جديداً وقم بالتعديل عليه من خلال تطبيق المفكرة أو Notepad++. الصق الكود التالي في الملف:
AuthType Basic AuthName "Members Only" AuthUserFile /newfolder/.htpasswd require valid-user
في السطر الأول حددنا نوع المصادقة المطلوب، وBasic هو النوع المناسب في حالتنا هذه. أما في السطر الثاني فهو يحتوي على جملة تعرض للزائر عند طلب اسم المستخدم وكلمة المرور. في السطر الثالث مسار الملف الذي يحتوي على أسماء المستخدمين وكلمات المرور المشفّرة. وفي السطر الرابع يتم تحديد الأشخاص الذين بإمكانهم مشاهدة المجلد (أو المسار)، وهو كما هو مذكور valid-user أي المستخدمين الموجودين في الملف .htpasswd.
بالطبع عليك التعديل على الكود بما يناسب اسم ملف كلمات المرور ومساره.
والآن ارفع هذا الملف إلى المسار الذي تريد حمايته بكلمة مرور.
وهكذا عندما ستحاول زيارة المسار المحمي سيطلب منك المتصفح كتابة اسم المستخدم وكلمة المرور.
هناك طريقة أخرى لحماية مسار معيّن بكلمة مرور، ولا تتطلب التعامل مع التعليمات البرمجية. وهذا عن طريق لوحة تحكم cPanel. علماً أن النتيجة تكون واحدة، لأن لوحة التحكم تقوم بإجراء هذه التعديلات على ملف .htaccess نفسه.
انتقل للوحة التحكم وابحث عن Directory Privacy.
ستظهر مجموعة المجلدات في الاستضافة، انقر على Edit
في الصفحة التالية عليك تفعيل Password protect this directory واختيار اسم للمجلد الذي تريد حمايته، ومن ثم اختر Save
أخيراً عليك إنشاء مستخدم وكلمة مرور وتأكيدها قبل الضغط على Save
لإزالة الحماية بكلمة المرور ما عليك سوا إلغاء تفعيل Password protect this directory كما في الخطوة السابقة، ومن ثم حفظ التغييرات.
6. استخدام prohibiting hotlinks من خلال ملف .htaccess
عند استخدام الصور في موقعك فيمكنك إما رفع الصور على السيرفر خاصتك، أو يمكن استخدام صور مستضافة في مواقع أخرى وهذا ما يدعى بـhotlinking.
وفي حال كانت الصور الأصلية التي رفعتها على سيرفرك قد تم استخدامها في مواقع أخرى باستخدام hotlinking، فإنك ستلاحظ ازدياداً في استهلاك موارد السيرفر. لأن تحميل هذه الصور في المواقع الأخرى سيكون على عاتق سيرفرك. وهنا يأتي دور hotlink protection.
يمكن تفعيل ذلك من خلال ملف .htaccess وذلك من خلال إضافة الكود التالي:
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)example.com/.*$ [NC] RewriteRule \.
عليك بالطبع حذف example ووضع دومين موقعك. ومن ثم احفظ الملف وارفعه على السيرفر. واحرص على عدم تعديل أي تعليمات أخرى في ملف .htaccess.
7. كيفية تغيير الصفحة الافتراضية index page في ملف .htaccess
وهي مفيدة في حال كنت تقوم بتغيير الاستضافة من شركة لأخرى، لأن الشركات المختلفة تستخدم أسماء مختلفة للصفحة الافتراضية.
كل ما عليك فعله هو إضافة الكود التالي لملف .htaccess:
#Alternate default index page DirectoryIndex first.html
حيث اخترنا في المثال السابق الصفحة المسماة first.html لتكون الصفحة الافتراضية التي يبحث عنها السيرفر. يمكن إضافة أكثر من صفحة، ففي حال لم يعثر السيرفر على الصفحة first.html فإنه سيبحث عن index.htm وثم index.html وثم index.php. والترتيب من الأيسر للأيمن كالتالي:
#Alternate default index pages DirectoryIndex first.html index.htm index.html index.php
أخيراً لا تنسى حفظ التغييرات. وننبه مرة أخرى إلى ضرورة عدم التعديل على ملف .htaccess إن لم تكن تعرف ما الذي تقوم به فعلاً.
8. كيفية الإجبار على تحميل الملف بدلاً من عرضه بواسطة ملف .htaccess
بشكل افتراضي عندما ينقر الزائر على ملف PDF أو ملف صوتي أو فيديو مرفوع على موقعك فإنه سيعرضه في نافذة جديدة في المتصفح. ويمكن للزائر بعد ذلك تحميله من خلال المتصفح الذي يستخدمه. ولكن ماذا لو أردت أن يبدأ تحميل الملف مباشرة عند النقر عليه؟ هذا سيسهّل الأمر على الزائر كثيراً.
للإجبار على تحميل الملف بدلاً من عرضه قم بتعديل ملف .htaccess واضف السطر التالي:
AddType application/octet-stream .avi .mpg .mov .pdf .xls .mp4
حي يمكنك إضافة لاحقة الملفات التي تريد إجبار السيرفر على تحميلها بدلاً من عرضها.
9. كيفية حظر عناوين IP محددة أو زوّار محددين باستخدام ملف .htaccess
يتم ذلك من خلال إضافة الكود التالي مع اختيار العناوين المحظورة أو المسموحة:
//Block users by IP order allow,deny deny from 192.168.1.1 allow from
يمكن أيضاً إذا كنت لا تزال في مرحلة تطوير الموقع وإنشائه منع السيرفر من عرض أي ملفات لكل المستخدمين عداك. وهذا من خلال التعليمات:
Order deny,allow Deny from all Allow from xxx.xxx.xxx.xxx
حيث xxx.xxx.xxx.xxx هو عنوان IP الخاص بك. يمكنك مثلاً استبدال آخر 3 خانات بـ0/12 وهذا يعني مجالاً من 0 لـ12، أي أنه يوفّر عليك الوقت لكتابة كل عناوين IP المسموح لها بزيارة الموقع.
لحظر كل الزوّار بغض النظر عن الـIP استخدم السطر التالي:
Deny from all
يمكنك أيضاً حظر الزوّار القادمين من referrer محدد (مثل موقع بدومين محدد). وذلك من خلال:
RewriteCond %{HTTP_REFERER} block-this-referer\.com [NC,OR] RewriteCond %{HTTP_REFERER} and-block-traffic-that-this-site-sends\.com [NC] RewriteRule .* - [F]
إصلاح الأخطاء في ملف .htaccess
في حال ظهور أخطاء عند محاولة الوصول لموقعك فقد يكون ملف .htaccess هو السبب. للتأكّد من ذلك اذهب لمدير الملفات في لوحة التحكم وغيّر اسم الملف لـ.htaccess.old مثلاً. ثم جرّب الدخول للموقع. فإذا لم تظهر الأخطاء السابقة عندها، فهذا يعني أن المشكلة تكمن فعلاً في ملف .htaccess
أما إذا بقيت المشكلة فعليك إعادة كل شيء كما كان لكي لا يسبب ذلك أي مشاكل في الموقع عند إصلاح المشكلة فعلاً.
ويمكن ذلك من خلال استعادة ملف .htaccess الأصلي الذي قمت بأخذ نسخة احتياطية عنه في البداية، أو استعادة نسخة احتياطية سابقة من كامل الموقع.
ولكن…
السؤال الذي يطرح نفسه هو: طالما أنه يمكن القيام بهذه التعديلات من خلال لوحة التحكّم فما هي فائدة هذا الملف؟
والجواب أن ذلك ضروري في الاستضافات التي لا تزوّدك بإمكانات للتعديل على ملفات الإعدادات للسيرفر Apache ولا لوحة تحكّم cPanel. فهذا الملف يعتبر الجسر الواصل بين حساب cPanel العادي وإعدادات سيرفر Apache المتقدّمة. وهذا ما يجعله هاماً جداً ومفيداً جداً في نفس الوقت.
هل أضاف هذا المقال لمعلوماتك؟ إذاً شاركه مع أصدقائك.