Review : มหัศจรรย์ไฟล์ .htaccess ใน Apache


การใช้งาน Apache บนระบบปฏิบัติการตระกูลยูนิกส์/ลีนุกซ์ นั่นมีข้อดีอยู่อย่างหนึ่ง คือ กำหนดหรือปรับแต่งค่าสำหรับแสดงผลหน้าเวบเพจเฉพาะส่วนโดยไม่ต้องแก้ไขค่าใน httpd.conf ผ่านเวบเซิร์ฟเวอร์ นั่นทำได้โดยกำหนดค่าผ่านไฟล์ .htaccess แถมไม่ต้องสั่งรีสตาร์ท Apache ใหม่เพื่อโหลดค่าคอนฟิกเข้ามาแต่จะสามารถใช้งานได้ทันทีเมื่ออัปโหลดขึ้นไปไว้บนเวบเซิร์ฟเวอร์ นับว่าเป็นข้อดีทีเดียว แต่เสียใจสำหรับคนที่ใช้ Apache บนวินโดวส์คงจะทำไม่ได้เนื่องจากไม่เข้าใจไฟล์ที่มีเฉพาะนามสกุล

โดยไฟล์ .htaccess จะถูกโหลดทุกครั้งเมื่อเรียกชื่อเวบไซต์และไดเรกทอรี่ที่ต้องการและจะมีผลเฉพาะส่วนไม่มีผลกระทบกับระบบโดยรวม หรือค่าคอนฟิกในไฟล์ .htaccess เป็นส่วนค่าคอนฟิกเพิ่มเติมสำหรับใช้ร่วมกับไฟล์ httpd.conf นั่นเอง

เมื่อคุณอัปโหลดไฟล์ .htaccess ขึ้นไปด้วยโปรแกรม FileZilla นั่นจะพบว่า จะไม่สามารถมองเห็นได้เพราะตามหลักของระบบไฟล์บนระบบปฏิบัติการตระกูลยูนิกส์/ลีนุกซ์นั่นจะถือว่าไฟล์ที่ขึ้นต้นด้วยจุด (.) นำหน้าจะถือว่าเป็นไฟล์ที่ซ่อนไว้ไม่ให้มองเห็นได้ ทำให้บางคนนึกว่ายังไม่ได้อัปโหลดขึ้นไปที

ไฟล์ .htaccess สามารถนำไปใช้งานต่างๆ ได้อย่างไรบ้าง มีรายละเอียดดังนี้

1.แสดงหน้าชนิดข้อผิดพลาด

ปกติเมื่อเรียกหน้าเวบเพจ Apache จะตรวจสอบว่าพบหน้าเวบเพจหรือเปล่าโดยจะแจ้งสถานะการค้นหาเวบเพจว่าเป็นสถานะอะไร โดยมีเลขบอกสถานะต่างๆ ดังนี้

– 200 : เมื่อพบหน้าเวบเพจนี้
– 401 : เมื่อต้องการรหัสผ่านยนยันสิทธิ์ในการใช้งาน
– 403 : เมื่อไม่อนุญาติให้เรียกใช้งาน
– 404 : เมื่อไม่พบหน้าเวบเพจ
– 405 : มีขบวนการบ้างอย่างไม่ได้รับอนุญาติ
– 500 : เกิดข้อผิดพลาดจากการทำงานภายในระบบ

โดยเมื่อเกิดข้อผิดพลาดเกิดขึ้นเวบเซิร์ฟเวอร์จะสอบถามไปยังไฟล์ .htaccess ว่าจะตอบสนองอย่างไร โดยมีรูปแบบในไฟล์ .htaccess ดังนี้

ErrorDocument หมายเลขสถานะข้อผิดพลาด ที่ตั้งของไฟล์เมื่อเกิดข้อผิดพลาดเกิดขึ้น

ตัวอย่างเช่น

ErrorDocument 404 /errorpages/404.html
ErrorDocument 403 /errorpages/403.html
ErrorDocument 500 /errorpages/500.html

 

2.ยับยั้งไม่ให้ใช้งาน

ถ้าคุณมีไดเรกทอรี่ที่ไม่ต้องการให้ใครเข้าไปได้เนื่องจากมีไฟล์รูปภาพหรือเอกสารสำคัญในนั่น คุณสามารถสร้างไฟล์ .htaccess ขึ้นมาและกำหนดค่านี้ลงไป

IndexIgnore ชนิดของไฟล์

ตัวอย่างเช่น

IndexIgnore * หมายความว่าไม่ให้แสดงไฟล์ใดๆ ในไดเรกทอรี่นี้

IndexIgnore *.jpg *.gif *.png *.txt หมายความว่าให้ไม่แสดงไฟล์ที่มีนามสกุล jpg , gif , png , txt

 

3.สร้างไฟล์หน้าแรกขึ้นมาใหม่

ไฟล์หน้าแรกสำหรับไดเรกทอรี่ใดที่ต้องการให้มีชื่อไฟล์ใหม่แทนที่จะใช้ไฟล์ index.html , index.shtml , default.html นั่นคุณสามารถกำหนดชื่อไฟล์สำหรับหน้าแรกขึ้นมาให่ได้โดยมีรูปแบบดังนี้

DirectoryIndex ชื่อไฟล์หน้าแรกใหม่

ตัวอย่างเช่น

DirectoryIndex yoursite.html
DirectoryIndex yoursite.html /cgi-bin/index.pl /index.html

โดยจะให้ลำดับความสำคัญในการหาไฟล์หน้าแรกตามลำดับจากซ้ายมาขวา

 

4.เพิ่มความสามารถ SSI

บางเวบเซิร์ฟเวอร์ที่ใช้ Apache นั่นไม่ได้ตั้งค่าให้ใช้ความสามารถ SSI (Server Side Includes)ที่จะใช้การสร้างเวบเพจร่วมกับเวบเซิร์ฟเวอร์ วิธีการนี้เมื่อก่อนเป็นที่นิยมสมัยที่ Perl ยังเฟื่องฟู ปัจจุบันนี้ส่วนใหญ่ไม่ค่อยใช้งานแล้วจึงตัดค่าคอนฟิกนี้ออกไป ถ้าเวบเซิร์ฟเวอร์ยอมให้ใช้ .htaccess คุณก็สามารถเพิ่มเข้าไปได้ดังนี้

AddType text/html .shtml
AddHandler server-parsed .shtml
AddHandler server-parsed .html
Options Indexes FollowSymLinks Includes

ในแต่ละบรรทัดมีรายละเอียดดังนี้

บรรทัดที่ 1 : เพิ่มชนิดไฟล์แบบ text/html นั่นมีนามสกุล .shtml เพิ่มเข้าไป
บรรทัดที่ 2-3 : เพิ่มการทำงานร่วมกับเวบเซิร์ฟเวอร์ให้กับนามสกุลไฟล์ .shtml และ .html
บรรทัดที่ 4 : เพิ่มออปชั่นบอกให้ทำงานแบบ SSI หากขาดบรรทัดนี้จะไม่สามารถใช้งานได้

 

5.รีไดเรกไฟล์

บางครั้งจำเป็นต้องส่งต่อไฟล์ไปยังที่อยู่ใหม่ โดยระบุลงไปในไฟล์ .htaccess เมื่อมีการเรียกไฟล์ดังกล่าวให้เวบเซิร์ฟเวอร์ส่งต่อไปยังที่อยู่ของไฟล์ใหม่หรือชื่อไฟล์ใหม่ โดยมีรูปแบบดังนี้

Redirect ชื่อไฟล์เก่า ชื่อไฟล์ใหม่พร้อมที่อยู่

ตัวอย่างเช่น

Redirect /oldfile.html /newfile.html
Redirect /oldfile.html http://www.yournewsite.com/newfile.html

 

6.จำกัดการใช้งาน

คุณสามารถจำกัดการใช้งานไดเรกทอรี่ที่ต้องการ โดยระบุว่ามาจากที่ใดสามารถเข้าได้บ้าง โดยมีรูปแบบดังนี้

order allow,deny
deny from ชื่อโดเมนเนมหรือไอพีแอดเดรส
allow from ชื่อโดเมนเนมหรือไอพีแอดเดรส

ตัวอย่างเช่น

order allow,deny
deny from 64.45.16.87
deny from really-bad-domain.net
allow from all

บรรทัดแรกกำหนดลำดับความสำคัญการอนุญาติหริอปฏิเสธการทำงาน โดยคุณสามารถสลับตำแหน่งของค่าทั้งสองได้ โดยให้ลำดับความสำคัญค่าทางซ้ายมือก่อนค่าทางขวามือ
บรรทัดต่อมาคือกำหนดชื่อโดเมนเนมหรือไอพีแอดเดรสใดที่อนุญาติได้บ้างจากตัวอย่างไม่อนุญาติเครื่องหมายเลขไอพี 64.45.16.87 และมาจากโดเมนเนม really-bad-domain.net เข้าได้

 

7.ใส่รห้สผ่านและยูสเซอร์เนม

ก่อนอื่นต้องสร้างยูสเซอร์เนมและรหัสผ่านขึ้นมาก่อน โดยใช้โปรแกรมที่ชื่อ htpasswd โดยต้อง Telnet เข้าไปใน Shell และเรียกคำสั่งต่อไปนี้

htpasswd -c /home/[domainname]/.htpasswd [username]

โดยเรียกโปรแกรม htpasswd ออปชั่น -c คือให้สร้างไฟล์ขึ้นมาใหม่ ออปชั่นตัวต่อไปคือพาทที่ตั้งของไฟล์ .htpasswd ที่จะถูกสร้างขึ้นมา ตามด้วยชื่อยูสเซอร์ที่จะสร้าง จะปรากฏบรรทัดคำสั่งให้กรอกรหัสผ่านเข้าไป 2 ครั้ง

ตัวอย่างเช่น

htpasswd -c /home/demo/.htpasswd webmin

หากต้องการยูสเซอร์เพิ่มในไฟล์ .htpasswd ให้ใช้คำสั่งต่อไปนี้

htpasswd /home/[domainname]/.htpasswd [username2]

ไม่ต้องมีออปชั่น -c ในบรรทัดคำสั่งเพราะไม่ต้องสร้างไฟล์ใหม่ขึ้นมา

ถ้าไม่มี Shell ให้ใช้งานให้ไปที่ http://www.euronet.nl/~arnow/htpasswd/ กรอกชื่อยูสเซอร์และรหัสผ่านเข้าไป 2 ครั้งพร้อมกดปุ่มจะได้ ชื่อยูสเซอร์:รหัสผ่านที่เข้ารหัสเรียบร้อย ให้คัดลอกไปสร้างเท็กซ์ไฟล์ชื่อ .htpasswd พร้อมอัปโหลดไปไว้ในไดเรกทอรี่ชื่อ /home/demo

ตัวอย่างเช่น

webmin:09/LuWEnVExOw

จากนั่นสร้างไฟล์ .htaccess ขึ้นมาโดยมีโครงสร้างดังนี้

AuthUserFile /home/[domainname]/.htpasswd
AuthGroupFile /dev/null
AuthName ByPassword
AuthType Basic

require user [username]

ตัวอย่างเช่น

AuthUserFile /home/demo/.htpasswd
AuthGroupFile /dev/null
AuthName ByPassword
AuthType Basic

require user webmin

อัปโหลดไฟล์ .htaccess ไปไว้ในไดเรกทอรี่ที่ต้องการป้องกันการเข้าถึงเมื่อเรียกหน้าเวบเพจในไดเรกทอรี่ดังกล่าว เวบเซิร์ฟเวอร์จะได้ตรวจสอบไฟล์ .htaccess จะนำค่าคอนฟิกในไฟล์มาใช้งาน

จะเห็นได้ว่าคุณจะปกป้องไดเรกทอรี่อื่นเพิ่มเติม เพียงคุณเพียงอับโหลดไฟล์ .htaccess ไปไว้ในไดเรกทอรี่ที่ต้องการโดยไม่ต้องสร้างยูสเซอร์ใหม่ขึ้นมา เพราะใช้ยูสเซอร์เดียวกันที่อยูในไฟล์ .htpasswd นั่นเอง

จะเห็นได้ว่าถ้าใช้ Apache ในระบบปฏิบัติการยูนิกซ์หรือลีนุกซ์จะปรับแต่งได้ต้องความต้องการใช้งานของคุณได้ แม้จะปรับได้เพียงเล็กน้อยแต่ก็สามารถทำได้ คำแนะนำต่างข้างบนอาจจะไม่สามารถทำได้ในบ้างเวบโฮสต์ติ้งดังนั้นต้องทดสอบด้วยตนเองเพราะค่าคอนฟิกนั่นอาจจะถูกการ Diable เอาไว้ในไฟล์ httpd.conf แต่ส่วนใหญ่จะทำได้เกือบ 90 % หรือบ้างครั้งอาจจะใช้ค่าคอนฟฟิกที่เพี้ยนไปจากที่แนะนำไปเล็กน้อยขอให้ติดต่อผู้ดูแลระบบอีกครั้ง

เขียนโดย : GuruDD.com

ปล. บันทึกช่วยจำ