يعد ملف تكوين Apache .htaccess نقطة صعبة ومهمة. لم أستقر مطلقًا على تعلمها بعناية، لقد اعتقدت دائمًا أن طريقة إعادة التوجيه تنتمي إلى mod_rewrite، وأنا في حيرة من أمري عند استخدامها. لقد وجدت برنامجًا تعليميًا جيدًا جدًا اليوم، وأثناء تعلمه، كتبت بعض الأفكار.
تم التحديث: تصحيح بعض المشكلات البسيطة بشكل مستمر
المصدر: الدليل الشامل لـ .htaccess
المرجع الرسمي: مرجع التوجيه السريع
1 مقدمة مقدمة
اسم الملف. سمة htaccess 644 (RW-R–R–)
سيؤثر htaccess على جميع الدلائل الفرعية الموجودة في الدليل الذي يوجد به. لاحظ أنه يلزم الاحتفاظ بمعظم المحتوى ضمن سطر واحد، وإلا سيحدث خطأ.
2 وثائق الخطأ وثائق الخطأ
الوثيقة الرسمية: توجيه ErrorDocument
مستند رمز ErrorDocument
مثال
ErrorDocument 400 /errors/badrequest.html
ErrorDocument 404 http://yoursite/errors/notfound.html
ErrorDocument 401 "الترخيص مطلوب"
(لاحظ أن أي علامات اقتباس مزدوجة تظهر لاحقًا في المحتوى يجب حذفها كـ ")
رموز حالة HTTP الشائعة
طلبات العملاء الناجحة
200 موافق
201 تم الإنشاء
202 مقبول
203 المعلومات غير الرسمية
204 لا يوجد محتوى
205 إعادة ضبط المحتوى
206 المحتوى الجزئي
تمت إعادة توجيه طلب العميل
300 اختيارات متعددة
301 انتقل إلى الأبد
302 تم نقله مؤقتًا
303 انظر أخرى
304 لم يتم تعديله
305 استخدم الوكيل
أخطاء طلب العميل
400 طلب سيء
401 إذن مطلوب
402 الدفع مطلوب (لم يستخدم بعد)
403 ممنوع
404 غير موجود
405 الطريقة غير مسموح بها
406 غير مقبول (ترميز)
407 مصادقة الوكيل مطلوبة
408 انتهت مهلة الطلب
409 طلب متضارب
410 ذهب
411 طول المحتوى مطلوب
412 فشل الشرط المسبق
413 طلب الكيان طويل جدًا
414 طلب URI طويل جدًا
415 نوع الوسائط غير معتمد
أخطاء الخادم
500 خطأ داخلي في الخادم
501 لم ينفذ
502 مدخل غير صالح
503 الخدمة غير متاحة
504 مهلة البوابة
505 إصدار HTTP غير مدعوم
3 حماية كلمة المرور حماية كلمة المرور
الوثيقة الرسمية: المصادقة والترخيص والتحكم في الوصول
افترض أن ملف كلمة المرور هو .htpasswd
AuthUserFile /usr/local/safedir/.htpasswd (يجب استخدام اسم المسار الكامل هنا)
اسم المصادقة أدخل كلمة المرور
نوع المصادقة الأساسي
طريقتان شائعتان للتحقق:
تتطلب userwindix
(يُسمح فقط للمستخدم Windix بتسجيل الدخول)
تتطلب مستخدمًا صالحًا
(يمكن لجميع المستخدمين القانونيين تسجيل الدخول)
نصيحة: كيفية إنشاء ملف كلمة المرور باستخدام الأمر htpasswd (المضمن مع Apache)
يجب إنشاء ملف كلمة المرور للجيل الأول
htpasswd -c .htpasswd user1
أضف مستخدمين جدد لاحقًا
htpasswd .htpasswd user2
4 تمكين SSI عبر htaccess السماح بوظيفة SSI (بما في ذلك جانب الخادم) من خلال htaccess
AddType نص/html .shtml
AddHandler الخادم الذي تم تحليله .shtml
تتضمن فهارس الخيارات FollowSymLinks
فهرس الدليل Index.shtml Index.html
5 حظر المستخدمين عن طريق IP منع وصول المستخدم على أساس IP
السماح بالأمر، الرفض
رفض من 123.45.6.7
رفض من 12.34.5 (عنوان الفئة C بالكامل)
السماح من الجميع
6 حظر المستخدمين/المواقع عن طريق المُحيل حظر المستخدمين/المواقع بناءً على المُحيل
يتطلب وحدة mod_rewrite
مثال 1. حظر مُحيل واحد: badsite.com
إعادة كتابة المحرك قيد التشغيل
# خيارات +FollowSymlinks
RewriteCond %{HTTP_REFERER} badsite.com [NC]
إعادة كتابة القاعدة .* - [F]
مثال 2. حظر مُحيلين متعددين: badsite1.com، badsite2.com
إعادة كتابة المحرك قيد التشغيل
# خيارات +FollowSymlinks
إعادة كتابة Cond %{HTTP_REFERER} badsite1.com [NC,OR]
أعد كتابة %{HTTP_REFERER} badsite2.com
إعادة كتابة القاعدة .* - [F]
[NC] - حساس لحالة الأحرف
[ف] - 403 محرم
لاحظ أنه تم التعليق على عبارة "Options +FollowSymlinks" في الكود أعلاه. إذا لم يقم الخادم بتعيين FollowSymLinks في قسم httpd.conf، فستحتاج إلى إضافة هذه الجملة، وإلا فسوف تحصل على خطأ "500 خطأ داخلي في الخادم".
7 حظر الروبوتات السيئة ومتصفحات المواقع (المعروفة أيضًا باسم المتصفحات غير المتصلة بالإنترنت) حظر الروبوتات السيئة والمتصفحات غير المتصلة بالإنترنت
يتطلب وحدة mod_rewrite
على سبيل المثال، بعض برامج الزحف التي تلتقط عناوين البريد الإلكتروني العشوائية وبرامج الزحف التي لا تتوافق مع ملف robots.txt (مثل Baidu؟)
ويمكن الحكم عليهم بناءً على HTTP_USER_AGENT
(ولكن هناك المزيد من المواقع الوقحة مثل "Zhongsou zhongsou.com" الذين قاموا بتعيين وكيلهم الخاص على "Mozilla/4.0 (متوافق؛ MSIE 5.5؛ Windows NT 5.0)". إنهم مارقون للغاية ولا يمكنهم فعل أي شيء.)
RewriteEngineOn
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot mailto:[email protected] [أو]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
إعادة كتابة Cond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download Demon [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^EmailSiphon [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^GrabNet [OR]
إعادة كتابة Cond %{HTTP_USER_AGENT} ^Grafula [OR]
إعادة كتابة Cond %{HTTP_USER_AGENT} ^HMView [OR]
إعادة كتابة Cond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} Indy Library [NC,OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet Ninja [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC Web Spider [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass Downloader [OR]
أداة RewriteCond %{HTTP_USER_AGENT} ^MIDown [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net Vampire [OR]
ريوريتكوند %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^ الأخطبوط [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline Navigator [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
إعادة كتابة Cond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport Pro [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web Image Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^WebReaper [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^موقع ويب eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
إعادة كتابة Cond %{HTTP_USER_AGENT} ^WebZIP [OR]
ريوريتيكوند %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^أرملة [OR]
إعادة كتابة Cond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^زيوس
قاعدة إعادة الكتابة ^.* - [F,L]
[ف] - 403 حرام
[ل] - ؟
8 قم بتغيير صفحة الدليل الافتراضية الخاصة بك قم بتغيير صفحة الدليل الافتراضية الخاصة بك
DirectoryIndex Index.html Index.php Index.cgi Index.pl
9 عمليات إعادة التوجيه
ملف واحد
إعادة توجيه /old_dir/old_file.html http://yoursite.com/new_dir/new_file.html
الدليل بأكمله
إعادة توجيه /old_dir http://yoursite.com/new_dir
التأثير: مثل نقل الدليل
http://yoursite.com/old_dir -> http://yoursite.com/new_dir
http://yoursite.com/old_dir/dir1/test.html -> http://yoursite.com/new_dir/dir1/test.html
نصيحة: حل لمشكلة عدم إمكانية إعادة التوجيه عند استخدام دليل المستخدم
عند استخدام دليل المستخدم الافتراضي لـ Apache، مثل http://mysite.com/~windix، وعندما تريد إعادة التوجيه إلى http://mysite.com/~windix/jump، ستجد أن إعادة التوجيه التالية لا عمل:
إعادة توجيه / القفز http://www.google.com
الطريقة الصحيحة هي تغييره إلى
إعادة توجيه /~windix/jump http://www.google.com
(المصدر: إعادة التوجيه .htaccess في "المواقع" لا تعيد التوجيه: لماذا؟)
10 منع عرض ملف htaccess منع عرض ملف htaccess
السماح بالأمر، الرفض
أنكر من الجميع
11 إضافة أنواع MIME إضافة أنواع MIME
تطبيق AddType/x-shockwave-flash swf
نصائح: ضبط النوع على application/octet-stream سيطالبك بالتنزيل
12 منع الارتباط السريع للصور وأنواع الملفات الأخرى منع الارتباط السريع
يتطلب وحدة mod_rewrite
إعادة كتابة المحرك قيد التشغيل
أعد كتابة Cond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www/.)?mydomain.com/.*$ [NC]
RewriteRule .(gif|jpg|js|css)$ - [F]
تحليل:
إذا لم يكن HTTP_REFERER فارغًا (المصدر هو مواقع أخرى، غير متصلة مباشرة) وإذا لم يبدأ HTTP_REFERER بـ (www.)mydomain.com (تجاهل حالة الأحرف [NC]) (المصدر ليس هذا الموقع)
يعطي 403 خطأ ممنوع [F] لجميع الملفات التي تنتهي بـ .gif/.jpg/.js/.css
يمكنك أيضًا تحديد استجابة، حيث يوضح المثال التالي صورة بديلة
قاعدة إعادة الكتابة .(gif|jpg)$ [R,L]
[R] - إعادة التوجيه
[ل] - الرابط
13 منع قائمة الدليل منع عرض قائمة الدليل
تجاهل الفهرس*
مؤشر تجاهل *.jpg *.gif
نصائح:
السماح بعرض قائمة الدليل: الخيارات + الفهارس
تعطيل عرض قائمة الكهنة: الخيارات - الفهارس
عرض معلومات سريعة: ملف الرأس HEADER، ملف التذييل README