في هذه المقالة، سنتناول المبادئ الأساسية لاستخدام ملف .htaccess، وهو ضروري لتحسين محركات البحث (SEO). يضمن هذا الملف فهرسة الصفحات بشكل صحيح بواسطة محركات البحث. سنتعلم كيفية إدارة عمليات إعادة التوجيه، وضبط الأمان، وتحسين الأداء. بالإضافة إلى ذلك، سنقدم نصائح حول كيفية ضبط هذا الملف بشكل مستقل.
لماذا هناك حاجة إلى .htaccess
يُعد ملف .htaccess بمثابة "جهاز تحكم عن بُعد" لمطوري الويب على خوادم Apache. فهو يوفر أدوات سهلة الاستخدام لضبط مختلف المعلمات وإدارة سلوك الموقع الإلكتروني. عند عدم توفر الوصول المباشر إلى ملفات التكوين الرئيسية للخادم (كما هو الحال غالبًا في الاستضافة الافتراضية، على سبيل المثال)، يُصبح ملف .htaccess أداة مفيدة لإجراء التغييرات اللازمة.
يوجد ملف htaccess عادةً في المجلد الرئيسي لموقعك أو في المجلدات التي تتطلب إعدادات خاصة. على سبيل المثال، إذا كنت تستخدم ووردبريس، يمكنك ضبط الإعدادات من خلال إضافة Yoast SEO، التي شرحناها في مقال " ضبط ملف robots.txt" . في الحالات الأخرى، يكفي الانتقال إلى المجلد المطلوب وتعديل ملف htaccess الموجود، أو إنشاء ملف جديد إذا لم يكن موجودًا.
تكوين ملف .htaccess
301 إعادة توجيه htaccess
يمكن تشبيه إعادة التوجيه 301 في ملف .htaccess بإعادة التوجيه الدائمة لموقع ويب. فهي تُعلم محركات البحث والمتصفحات بأن الصفحة أصبحت الآن في عنوان جديد بشكل دائم، وتقترح تحديث الإشارات المرجعية والفهرسة. تُستخدم إعادة التوجيه هذه عادةً عند نقل الصفحة أو حذفها للحفاظ على ترتيبها في نتائج البحث وإعادة توجيه الزوار إلى الموقع الجديد.
لتنشيط عمليات إعادة التوجيه، تحتاج إلى تمكين الأمر المقابل في ملف .htaccess:
RewriteEngine on
بعد ذلك، يمكنك تكوين أبسط شكل لإعادة التوجيه:
<IfModule mod_rewrite.c>
RewriteEngine On
Redirect 301 /old-page.html /new-page.html
</IfModule>
يبدو التوجيه المماثل باستخدام توجيه RedirectPermanent كما يلي:
<IfModule mod_rewrite.c>
RewriteEngine On
Redirect permanent /old-page.html http://new-domain.ru/new-page.html
</IfModule>
هذه أسهل طرق إعادة التوجيه التي يمكن ضبطها. لنفترض الآن ضبطًا يستخدم أنواعًا أخرى أكثر تقدمًا من عمليات إعادة التوجيه باستخدام وحدة mod_rewrite :
<IfModule mod_rewrite.c>
RewriteEngine On
# Redirecting from one page to another
RewriteRule ^old-page.html$ http://www.example.com/new-page.html [R=301,L]
# Redirecting all traffic from one domain to another
RewriteCond %{HTTP_HOST} ^oldsite.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.oldsite.com$
RewriteRule ^(.*)$ http://www.newsite.com/$1 [R=301,L]
# Redirecting from www to non-www (or vice versa)
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
# Redirecting from HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
# Redirecting from one subdomain to another
RewriteCond %{HTTP_HOST} ^subdomain1.example.com$
RewriteRule ^(.*)$ http://subdomain2.example.com/$1 [R=301,L]
</IfModule>
إعادة توجيه 302 لملف .htaccess، الذي يشير إلى نقل مؤقت، أقل شيوعًا. إليك مثال على هذا الإعداد:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^old-page.html$ /new-page.html [R=302,L]
</IfModule>
مستند خطأ التوجيه
يتيح لك هذا الإعداد التحكم بما يراه المستخدم عند حدوث أخطاء HTTP على موقعك. بدلاً من رسالة الخطأ القياسية، يمكنك عرض صفحتك الخاصة، والتي ستكون أكثر إفادة للزائر وتساعده على فهم ما حدث. ما عليك سوى اتباع هذه الصيغة للاستخدام:
ErrorDocument <error_code> <URL_page>
على سبيل المثال،
ErrorDocument 404 /errors/not_found.html
يعني هذا أنه عند حدوث خطأ 404 ، سيتم فتح الصفحة الموجودة على الرابط /errors/not_found.html . يتم تحديد عناوين URL المطلقة بطريقة مماثلة:
ErrorDocument 500 http://example.com/errors/server_error.html
يوضح هذا المثال عرض صفحة server_error.html على الرابط http://example.com/errors/ في حالة حدوث خطأ 500.
رفض الوصول إلى دليل الموقع
يحتوي ملف .htaccess على الأمر Deny from all ، الذي يمنع الوصول إلى مجلدات أو ملفات معينة على خادم الويب الخاص بك. قد يكون هذا مفيدًا إذا كنت ترغب في إخفاء معلومات خاصة أو ملفات مهمة عن زوار الموقع لضمان أمان البيانات.
لتعطيل القائمة (عرض جميع الدلائل المتاحة)، تحتاج إلى إضافة السطر:
Options -Indexes
يبدو مثال على حظر الوصول إلى دليل معين على النحو التالي:
<Directory /path_to_your_directory>
Order Deny,Allow
Deny from all
</Directory>
وبالمثل، يمكنك رفض الوصول إلى ملف واحد:
<Files "file.php">
Order Deny,Allow
Deny from all
</Files>
أو لمجموعة من الملفات حسب الامتداد:
<FilesMatch "\.(txt|log|bak)$"> # Select the desired extensions, in the example: txt, log, bak
Order Deny,Allow
Deny from all
</FilesMatch>
حظر الوصول عن طريق IP
حظر الوصول عبر عنوان IP في ملف .htaccess هو طريقة تسمح لك بتقييد الوصول إلى موقعك الإلكتروني لعناوين IP محددة أو مجموعاتها. قد يكون هذا مفيدًا إذا كنت ترغب في منع وصول أشخاص معينين أو برامج روبوت غير مرغوب فيها إلى موقعك أو أجزائه المحددة.
يتم حظر عنوان IP واحد باستخدام الأمر:
Order Deny,Allow
Allow from all
Deny from 11.22.33.44
يتم حظر عدة عناوين IP بشكل مماثل عن طريق تكرار سطر " الرفض من " مع العناوين المطلوبة.
لحظر مجموعة من عناوين IP:
Order Deny,Allow
Allow from all
Deny from 11.11.11.11/24
للسماح بالوصول لعناوين IP محددة فقط، أضف الكود:
Order Deny,Allow
Deny from all
Allow from 11.22.33.44
لرفض الوصول بشكل كامل، استخدم التوجيه Deny from all ، ولحظر العناوين حسب القناع، حدد Deny from 11.22.
حيث أن 11.22 هو قناع عنوان IP.
حظر الزوار بواسطة وكيل المستخدم
حظر المستخدمين باستخدام وكيل المستخدم في ملف .htaccess هو طريقة للتحكم في من يمكنه الوصول إلى خادم الويب الخاص بك بناءً على معلومات حول المتصفح الذي يستخدمه الزائر. تحتوي سلسلة وكيل المستخدم على بيانات حول المتصفح الذي يستخدمه الشخص للتفاعل مع خادمك، وبفضل هذه المعلومات، يمكنك تقييد وصول مستخدمين معينين.
الطريقة الأكثر شيوعًا للحظر بواسطة وكيل المستخدم هي استخدام mod_rewrite :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^Bot1 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot2 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot3 [NC]
RewriteRule ^.*$ - [F,L]
</IfModule>
في هذا المثال:
- يتم استخدام RewriteCond %{HTTP_USER_AGENT} للتحقق من سلسلة User-Agent.
- ^Bot1، ^Bot2، ^Bot3 أمثلة على سلاسل وكيل المستخدم التي نريد حظرها. تشير مُعدِّلات NC إلى أن المقارنة يجب ألا تُراعي حالة الأحرف.
- RewriteRule ^.*$ - [F,L] ينطبق على الطلب في حال استيفاء أيٍّ من شروط RewriteCond. يُرسل استجابةً برمز حالة 403 المحظور (F) ويوقف معالجة القواعد (L).
التخزين المؤقت في htaccess
يُساعد إعداد التخزين المؤقت عبر ملف .htaccess على تسريع موقعك الإلكتروني من خلال زيادة سرعة تحميله للمستخدمين. يعمل هذا الإعداد كالتالي: تُخزَّن ملفات معينة، مثل الصور وأنماط CSS ونصوص JavaScript، في ذاكرة التخزين المؤقت لمتصفح المستخدم بعد أول تحميل. الآن، يستطيع المتصفح استخدام هذه الملفات من ذاكرة التخزين المؤقت، بدلاً من إعادة تحميلها من الخادم في كل مرة يزور فيها المستخدم صفحة. هذا يُقلل من وقت التحميل ويُحسِّن أداء الموقع.
فكر في مثال:
# Enable caching for images for 1 month
<FilesMatch "\.(jpg|jpeg|png|gif|svg)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
# Enable caching for CSS and JavaScript for 1 week
<FilesMatch "\.(css|js)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
من ناحية أخرى، بالنسبة للموارد التي يتم تحديثها بشكل متكرر، فمن الضروري تعطيل التخزين المؤقت:
# Excluding caching for HTML pages and XML files
<FilesMatch "\.(html|xml)$">
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
</FilesMatch>
تحسين أداء الموقع
تساعد وحدتا mod_deflate و mod_gzip في Apache على ضغط المعلومات التي يرسلها الخادم إلى أجهزة المستخدمين. هذا يُصغّر حجم الملفات، مما يُسرّع تحميل الصفحات. مع ذلك، من المهم التذكير بأن دعم هذه الوحدات وتكوينها قد يختلف باختلاف الخادم.
مثال على استخدام وحدة mod_deflate :
<IfModule mod_deflate.c>
# Compressing text file types
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
مثال لـ mod_gzip :
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$ # Enabling compression for files with extensions .html, .txt, .css, .js, .php, .pl
mod_gzip_item_include mime ^application/x-javascript.* # Enabling compression for MIME types starting with application/x-javascript
mod_gzip_item_include mime ^text/.* # Enabling compression for MIME types starting with text/
mod_gzip_item_exclude mime ^image/.* # Excluding from compression MIME types starting with image/
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* # Excluding already compressed data (responses with the Content-Encoding: gzip header)
</IfModule>
ناقشنا التوجيهات الأكثر استخدامًا. يمكنك الاطلاع على جميع إمكانيات الملف في الوثائق الرسمية.
كيفية التحقق من وظيفة ملف .htaccess
للتحقق مما إذا كان ملف .htaccess الخاص بك يعمل على الموقع، يمكنك تنفيذ الخطوات التالية:
- تغيير ملف .htaccess عمدًا مع وجود خطأ. ردًا على ذلك، يُفترض أن يُظهر الخادم خطأً. توضح هذه الطريقة ما إذا كان تشغيل الملف مُطبقًا بشكل عام على الخادم.
- تحقق من فعالية التغييرات التي أجريتها. على سبيل المثال، قم بإجراء تعديل بسيط على أحد المعلمات وقيّم وجود أي تغييرات.
- تحقق من رمز حالة الصفحة إذا كانت التغييرات مرتبطة باستجابة الخادم. كيفية القيام بذلك، كما شرحنا سابقًا في المقالة. رموز خطأ HTTP: قائمة كاملة بأخطاء الخادم.
- راجع سجلات الخادم. فهي تعرض جميع الأخطاء المتعلقة بتشغيل ملف .htaccess.
- إجراء الاختبار باستخدام الخدمات أو الأدوات عبر الإنترنت.
من المهم أن تفهم أنه للتحقق من فعالية ملف .htaccess، ليس عليك تنفيذ جميع الخطوات دفعةً واحدة. يكفي اختيار الطريقة الأنسب من القائمة واستخدامها.
خاتمة
يُعدّ تهيئة ملف .htaccess خطوةً مهمةً في تحسين وحماية خادم Apache. لقد استكشفنا كيف يُساعد هذا الملف في إدارة عمليات إعادة التوجيه، وضغط المحتوى، وضمان الأمان. بمجرد إتقانك استخدام .htaccess، ستحصل على أداة فعّالة لتحسين أداء مواقع الويب ووظائفها.