ไฟล์การกำหนดค่าของ Apache .htaccess เป็นจุดที่ยากและสำคัญ ฉันไม่เคยตั้งใจที่จะเรียนรู้มันอย่างรอบคอบ ฉันคิดมาโดยตลอดว่าวิธีเปลี่ยนเส้นทางเป็นของ mod_rewrite และฉันก็สับสนเมื่อใช้มัน วันนี้ฉันพบบทช่วยสอนที่ดีมาก และในขณะที่เรียนรู้ ฉันก็จดความคิดบางอย่างไว้
อัปเดต: แก้ไขปัญหาเล็กๆ น้อยๆ อย่างต่อเนื่อง
ที่มา: คู่มือที่ครอบคลุมเกี่ยวกับ .htaccess
ข้อมูลอ้างอิงอย่างเป็นทางการ: การอ้างอิงคำสั่งด่วน
1 บทนำ บทนำ <br />ชื่อไฟล์.htaccess คุณลักษณะ 644 (RW-R–R–)
htaccess จะส่งผลต่อไดเร็กทอรีย่อยทั้งหมดในไดเร็กทอรีที่ตั้งอยู่ โปรดทราบว่าเนื้อหาส่วนใหญ่จะต้องเก็บไว้ภายในบรรทัดเดียว มิฉะนั้นจะเกิดข้อผิดพลาด
2 เอกสารแสดงข้อผิดพลาด เอกสารแสดงข้อผิดพลาด
เอกสารอย่างเป็นทางการ: ErrorDocument Directive
ข้อผิดพลาดเอกสารรหัสเอกสาร
ตัวอย่าง
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 เกตเวย์หมดเวลา
ไม่รองรับเวอร์ชัน HTTP 505
3 การป้องกันด้วยรหัสผ่าน การป้องกันด้วยรหัสผ่าน
เอกสารอย่างเป็นทางการ: การรับรองความถูกต้อง การอนุญาต และการควบคุมการเข้าถึง
สมมติว่าไฟล์รหัสผ่านคือ .htpasswd
AuthUserFile /usr/local/safedir/.htpasswd (ต้องใช้ชื่อพาธแบบเต็มที่นี่)
AuthName ใส่รหัสผ่าน
AuthType พื้นฐาน
วิธีการตรวจสอบทั่วไปสองวิธี:
ต้องการ userwindix
(เฉพาะผู้ใช้ windix เท่านั้นที่ได้รับอนุญาตให้เข้าสู่ระบบ)
ต้องการผู้ใช้ที่ถูกต้อง
(ผู้ใช้ที่ถูกกฎหมายทุกคนสามารถเข้าสู่ระบบได้)
เคล็ดลับ: วิธีสร้างไฟล์รหัสผ่านโดยใช้คำสั่ง htpasswd (รวมอยู่ใน apache)
จำเป็นต้องสร้างไฟล์รหัสผ่านสำหรับรุ่นแรก
htpasswd -c .htpasswd ผู้ใช้ 1
เพิ่มผู้ใช้ใหม่ในภายหลัง
htpasswd .htpasswd ผู้ใช้2
4 การเปิดใช้งาน SSI ผ่าน htaccess อนุญาตฟังก์ชัน SSI (รวมถึงฝั่งเซิร์ฟเวอร์) ผ่าน htaccess
เพิ่มประเภทข้อความ/html .shtml
.shtml ที่แยกวิเคราะห์เซิร์ฟเวอร์ AddHandler
ตัวเลือกดัชนี FollowSymLinks รวม
DirectoryIndexดัชนี.shtmlดัชนี.html
5 การบล็อกผู้ใช้โดย IP การบล็อกการเข้าถึงของผู้ใช้ตาม IP
คำสั่งอนุญาต, ปฏิเสธ
ปฏิเสธจาก 123.45.6.7
ปฏิเสธจาก 12.34.5 (ที่อยู่คลาส C ทั้งหมด)
อนุญาตจากทั้งหมด
6 การบล็อกผู้ใช้/ไซต์โดยผู้อ้างอิง การบล็อกผู้ใช้/ไซต์ตามผู้อ้างอิง <br />ต้องใช้โมดูล mod_rewrite
ตัวอย่างที่ 1 การบล็อกผู้อ้างอิงรายเดียว: badsite.com
เขียนใหม่เครื่องยนต์บน
# ตัวเลือก + ติดตาม Symlinks
RewriteCond %{HTTP_REFERER} เว็บไซต์ที่ไม่ถูกต้อง.com [NC]
เขียนกฎใหม่ .* - [F]
ตัวอย่างที่ 2 บล็อกผู้อ้างอิงหลายราย: badsite1.com, badsite2.com
เขียนใหม่เครื่องยนต์บน
# ตัวเลือก + ติดตาม Symlinks
RewriteCond %{HTTP_REFERER} badsite1.com [NC,OR]
RewriteCond %{HTTP_REFERER} badsite2.com
เขียนกฎใหม่ .* - [F]
[NC] - ไม่คำนึงถึงขนาดตัวพิมพ์
[F] - 403 สิ่งต้องห้าม
โปรดทราบว่าคำสั่ง "Options +FollowSymlinks" ถูกใส่เครื่องหมายความคิดเห็นไว้ในโค้ดด้านบน หากเซิร์ฟเวอร์ไม่ได้ตั้งค่า FollowSymLinks ในส่วน httpd.conf คุณจะต้องเพิ่มประโยคนี้ ไม่เช่นนั้นคุณจะได้รับข้อผิดพลาด "500 Internal Server error"
7 การบล็อกบอทที่ไม่ดีและโปรแกรมริปไซต์ (หรือที่เรียกว่าเบราว์เซอร์ออฟไลน์) การบล็อกบอทที่ไม่ดีและเบราว์เซอร์ออฟไลน์ <br />ต้องใช้โมดูล mod_rewrite
โปรแกรมรวบรวมข้อมูลที่ไม่ดี ตัวอย่างเช่น โปรแกรมรวบรวมข้อมูลบางตัวที่คว้าที่อยู่อีเมลขยะและโปรแกรมรวบรวมข้อมูลที่ไม่สอดคล้องกับ robots.txt (เช่น baidu?)
สามารถตัดสินได้จาก HTTP_USER_AGENT
(แต่ยังมีคนที่หน้าด้านกว่าเช่น "Zhongsou zhongsou.com" ที่ตั้งค่าตัวแทนของตัวเองเป็น "Mozilla/4.0 (เข้ากันได้; MSIE 5.5; Windows NT 5.0)" พวกเขาโกงเกินไปและทำอะไรไม่ได้เลย)
เขียนใหม่EngineOn
เขียนใหม่ %{HTTP_USER_AGENT} ^BlackWidow [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^Bot mailto:[email protected] [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^คัสโต [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^DISCO [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^ดาวน์โหลด Demon [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^eCatch [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^EirGrabber [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^EmailSiphon [OR]
เขียนใหม่ %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express WebPictures [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^EyeNetIE [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^FlashGet [หรือ]
เขียนซ้ำ %{HTTP_USER_AGENT} ^รับสิทธิ์ [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^รับเว็บ!
เขียนซ้ำ %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^GrabNet [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^กราฟ [OR]
เขียนใหม่ %{HTTP_USER_AGENT} ^HMView [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^รูปภาพ ผู้เปลื่อง [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^รูปภาพ ตัวดูด [หรือ]
RewriteCond %{HTTP_USER_AGENT} อินดี้ ไลบรารี [NC,OR]
เขียนซ้ำ %{HTTP_USER_AGENT} ^InterGET [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^อินเทอร์เน็ต นินจา [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC เว็บ สไปเดอร์ [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^ลาร์บิน [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^LeechFTP [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^Mass ตัวดาวน์โหลด [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^MIDown เครื่องมือ [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^มิสเตอร์ PiX [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^Navroad [OR]
เขียนใหม่ %{HTTP_USER_AGENT} ^NearSite [OR]
เขียนใหม่ %{HTTP_USER_AGENT} ^NetAnts [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^NetSpider [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^Net Vampire [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^NetZIP [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^ปลาหมึกยักษ์ [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^ออฟไลน์ Explorer [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^ออฟไลน์ นาวิเกเตอร์ [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^PageGrabber [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^พ่อ รูปภาพ [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^พาวุค [OR]
เขียนใหม่ %{HTTP_USER_AGENT} ^pcBrowser [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^ดาวน์โหลดจริง [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^รับใหม่ [หรือ]
เขียนซ้ำ %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^ดาวน์โหลดอย่างชาญฉลาด [หรือ]
เขียนซ้ำ %{HTTP_USER_AGENT} ^ซูเปอร์บอต [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^SuperHTTP [หรือ]
เขียนซ้ำ %{HTTP_USER_AGENT} ^เซิร์ฟบอท [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^tAkeOut [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^เทเลพอร์ต Pro [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^VoidEYE [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^เว็บ รูปภาพ Collector [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^เว็บ Sucker [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^เว็บอัตโนมัติ [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^เครื่องถ่ายเอกสารเว็บ [OR]
เขียนซ้ำ %{HTTP_USER_AGENT} ^WebFetch [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^WebGo IS [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^WebLeacher [OR]
เขียนใหม่ %{HTTP_USER_AGENT} ^WebReaper [หรือ]
เขียนซ้ำ %{HTTP_USER_AGENT} ^WebSauger [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^เว็บไซต์ eXtractor [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^เว็บไซต์ เควสเตอร์ [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^WebStripper [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^WebWhacker [OR]
เขียนซ้ำ %{HTTP_USER_AGENT} ^WebZIP [หรือ]
เขียนซ้ำ %{HTTP_USER_AGENT} ^Wget [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^หน้าต่าง [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^WWWOFFLE [หรือ]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon WebSpider [หรือ]
เขียนใหม่ %{HTTP_USER_AGENT} ^ซุส
เขียนกฎใหม่ ^.* - [F,L]
[F] - 403 สิ่งต้องห้าม
[ล] - ?
8 เปลี่ยนหน้าไดเรกทอรีเริ่มต้นของคุณ เปลี่ยนหน้าไดเรกทอรีเริ่มต้นของคุณ
DirectoryIndex index.html index.php index.cgi index.pl
9 เปลี่ยนเส้นทาง <br />ไฟล์เดียว
เปลี่ยนเส้นทาง /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 คุณจะพบว่าการเปลี่ยนเส้นทางต่อไปนี้ไม่ได้ งาน:
เปลี่ยนเส้นทาง /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 การป้องกันการเชื่อมโยงแบบ hot link ของรูปภาพและไฟล์ประเภทอื่นๆ Anti-hot linking <br />ต้องใช้โมดูล mod_rewrite
เขียนใหม่เครื่องยนต์บน
เขียนใหม่ %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www/.)?mydomain.com/.*$ [NC]
เขียนกฎใหม่ .(gif|jpg|js|css)$ - [F]
การวิเคราะห์:
หาก HTTP_REFERER ไม่ว่างเปล่า (แหล่งที่มาคือไซต์อื่น ไม่ได้เชื่อมต่อโดยตรง) และหาก HTTP_REFERER ไม่ได้ขึ้นต้นด้วย (www.)mydomain.com (ละเว้นตัวพิมพ์ [NC]) (แหล่งที่มาไม่ใช่ไซต์นี้)
ให้ข้อผิดพลาด 403 Forbidden [F] สำหรับไฟล์ทั้งหมดที่ลงท้ายด้วย .gif/.jpg/.js/.css
คุณยังสามารถระบุการตอบกลับได้ ดังตัวอย่างต่อไปนี้แสดงรูปภาพแทนที่
เขียนกฎใหม่ .(gif|jpg)$ [R,L]
[R] - เปลี่ยนเส้นทาง
[L] - ลิงค์
13 การป้องกันรายการไดเร็กทอรี การป้องกันรายการไดเร็กทอรีไม่ให้แสดง
ดัชนีไม่สนใจ*
ดัชนีไม่สนใจ *.jpg *.gif
เคล็ดลับ:
อนุญาตให้แสดงรายการไดเร็กทอรี: ตัวเลือก +ดัชนี
ปิดการใช้งานการแสดงรายชื่อนักบวช: ตัวเลือก -ดัชนี
แสดงข้อมูลพร้อมท์: ไฟล์ส่วนหัว HEADER, ไฟล์ส่วนท้าย README