ไฟล์ .htaccess คือ ไฟล์ที่ใช้ตั้งค่าหรือกำหนดค่าต่างๆ บนเว็บเซิร์ฟเวอร์ที่ใช้ซอฟต์แวร์ Apache Web Server โดยไฟล์นี้จะถูกวางไว้ในโฟลเดอร์หรือไดเรกทอรี่หลักของเว็บไซต์ หากมีการเปิดใช้งานเว็บไซต์ เซิร์ฟเวอร์ Apache จะอ่านและประมวลผลไฟล์ .htaccess เพื่อปรับแต่งพฤติกรรมและการทำงานของเว็บไซต์
ไฟล์ .htaccess สามารถใช้เปลี่ยนแปลงการตั้งค่าบนเว็บเซิร์ฟเวอร์ได้หลากหลายรูปแบบ อาทิ การเปลี่ยนเส้นทาง URL การเปลี่ยนเนื้อหาที่แสดงบนหน้าเว็บ การป้องกันการเข้าถึงไฟล์หรือโฟลเดอร์ที่ไม่ได้รับอนุญาต และหลายคำสั่งอื่น ๆ ที่สามารถมีผลต่อพฤติกรรมของเว็บไซต์
การใช้ไฟล์ .htaccess เป็นเครื่องมือที่มีประโยชน์ในการปรับแต่งและปกป้องเว็บไซต์ โดยไม่ต้องแก้ไขการตั้งค่าในระบบเซิร์ฟเวอร์โดยตรง นั่นทำให้เป็นวิธีที่สะดวกและเป็นทางเลือกที่ดีในการปรับปรุงและการบริหารจัดการเว็บไซต์ของคุณ
วิธีการใช้งาน .htaccess
ใช่เราสามารถสร้างไฟล์ .htaccess ได้โดยใช้ Text Editor ต่างๆ เช่น Visual Studio Code (แนะนำ), Notepad, WordPad, TextPad, Sublime Text หรือโปรแกรมอื่นๆ ที่ใช้ในการแก้ไขข้อความ ดังนั้นเมื่อต้องการสร้างไฟล์ .htaccess คุณสามารถทำตามขั้นตอนเหล่านี้
- เปิด Text Editor ที่คุณต้องการใช้งาน เช่น Notepad, Sublime Text เป็นต้น
- เขียนหรือวางคำสั่งที่คุณต้องการใช้งานในไฟล์ .htaccess ตามความต้องการ เช่นการเปลี่ยนเส้นทาง URL หรือการป้องกันการเข้าถึงไฟล์
- เมื่อเสร็จสิ้นการเขียนหรือวางคำสั่งในไฟล์ .htaccess ให้บันทึกไฟล์ด้วยนามสกุล .htaccess (ต้องมีจุดข้างหน้า) เช่น .htaccess
- หากคุณต้องการนำไฟล์ .htaccess ไปใช้กับโฟลเดอร์หรือไดเรกทอรี่ที่คุณต้องการควบคุม ให้นำไฟล์ .htaccess ที่คุณได้สร้างมาวางไว้ในโฟลเดอร์นั้น
ไฟล์ .htaccess จะมีผลต่อพฤติกรรมและการทำงานของเว็บไซต์ที่คุณใช้งาน และเมื่อเว็บเซิร์ฟเวอร์ Apache เริ่มทำงาน เซิร์ฟเวอร์จะอ่านและประมวลผลไฟล์ .htaccess เพื่อปรับแต่งพฤติกรรมตามที่คุณได้กำหนดไว้
คำสั่งที่ใช้งานบ่อยๆ ใน .htaccess
1. Redirects
Redirect /old_dir/ http://www.yourdomain.com/new_dir/index.html
คำสั่งนี้เป็นคำสั่งที่แจ้งให้ Apache Web Server ทำการรีไดเร็กหรือเปลี่ยนหน้าจากหน้าเก่าไปยังหน้าใหม่ ใช้เมื่อในกรณีที่เราเปลี่ยนชื่อลิงก์ URL จากตัวอย่างจะเห็นได้ว่าเราทำการแจ้งให้ทำการรีไดเร็กจากโฟลเดอร์เก่าที่ชื่อ old_dir ไปยังโฟลเดอร์ใหม่ที่ชื่อ new_dir โดยมีชื่อไฟล์เหมือนเดิมคือ index.html
2. Error documents
ErrorDocument 404 /error_pages/404.html
คำสั่งนี้จะเป็นคำสั่งที่แจ้งให้ Apache Web Server ทำการแสดงหน้า /error_pages/404.html ทุกครั้งเมื่อเกิดการแสดงผลผิดพลาด 404 Not Found เราสามารถทำในลักษณะเดียวกันกับการแสดงผลผิดพลาดในรหัสอื่นๆ เช่น 401 Unauthorised, 403 Forbidden, 500 Internal Server Error
3. Password Protection
AuthName “Member’s Area Name”
AuthUserFile /path/to/password/file/.htpasswd
AuthType Basic
require valid-user
คำสั่งนี้เป็นคำสั่งที่ป้องกันการเข้าถึงเว็บไซต์ของ Apache Web Server ซึ่งจะแสดงกล่องข้อความป๊อบอัพให้เราทำการล็อกอินด้วยการกรอกข้อมูลผู้ใช้งาน (Username) และรหัสผ่าน (Password) ก่อนเข้าสู่ระบบหลังบ้าน ประกอบไปด้วยข้อมูลดังต่อไปนี้
- บรรทัดที่ 1: AuthName จะเป็นชื่อของระบบที่เราต้องการให้ใช้สิทธิการเข้าถึง
- บรรทัดที่ 2: AuthUserFile เป็นส่วนที่เราระบุ path ที่เก็บไฟล์รหัสผ่านที่ชื่อ .htpasswd เอาไว้
- บรรทัดที่ 3: AuthType เป็นการระบุประเภทของการ Authen ในที่นี้ถูกระบุเป็น basic โดยอ้างอิงมาจาก HTTP authentication
- บรรทัดที่ 4: require เป็นการระบุว่าเราต้องการผู้ใช้งานที่ผ่านการล็อกอินแล้วเท่านั้น เราอาจจะระบุให้เป็นเฉพาะผู้ใช้งานนั้นๆ ได้ เช่น เขียนเป็น require user username หมายถึง เราต้องการให้คนที่ใช้ชื่อผู้ใช้งาน username เท่านั้นที่จะสามารถใช้งานได้
สำหรับในส่วนของไฟล์รหัสผ่านนั้น ในที่นี้ใช้ชื่อ .htpasswd เราจำเป็นที่จะต้องใส่รหัสลงไปในไฟล์ดังกล่าวด้วย ระบบของ Apache Web Server จะทำการตรวจสอบกับไฟล์ดังกล่าวก่อนที่จะให้ใช้งาน วิธีการใส่ข้อมูลก็ให้ใส่เป็น ชื่อผู้ใช้งาน:รหัสผ่าน ตามด้านล่างนี้ รหัสผ่านที่แสดงนั้นเราอาจจะทำการนำไปเข้ารหัสก่อน (Encrypted) เพื่อเป็นการป้องกันความปลอดภัยอีกขั้นหนึ่ง ในกรณีที่เรามีหลายผู้ใช้งานให้พิมพ์หนึ่งผู้ใช้งานต่อหนึ่งบรรทัด
username:encryptedpassword
fred_smith:oCF9Pam/MXJg2
4. Deny visitiors by IP Address
order allow,deny
deny from 255.0.0.0
deny from 123.45.6.
allow from all
สำหรับคำสั่งนี้เป็นคำสั่งไม่อนุญาตให้ใครก็ตามที่ใช้ IP ที่ระบุไว้ไม่สามารถเข้าใช้งานได้ จากตัวอย่างจะเห็นว่า เราจะไม่ให้ผู้ใช้งานที่มีไอพี 255.0.0.0 และผู้ใช้งานไอพี 123.45.6 (ตั้งแต่ 123.45.6.10 ถึง 123.45.6.255) เข้าใช้งาน
order allow,deny
allow from 255.0.0.0
deny from all
สำหรับอีกตัวอย่างหนึ่งเป็นการไม่อนุญาตให้เข้ามาใช้งานทุกไอพียกเว้นไอพี 255.0.0.0 เท่านั้น
5. Deny visitors by referrer
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} otherdomain\.com [NC]
RewriteRule .* – [F]
ประโยคด้านบนหมายถึง ให้ Apache Web Server ทำการบล็อกทราฟฟิกที่เข้ามาจาก URL ที่ชื่อ Otherdomain.com ในส่วนของ [NC] หมายถึงไม่ว่าจะเข้ามาในลักษณะใดดังต่อไปนี้ก็จะทำการบล็อก
ได้แก่ otherdomain.com หรือ OTHERDOMAIN.COM เป็นต้น
แต่ถ้าเราต้องการบล็อกมากกว่า 2 โดเมน ให้ทำการเพิ่ม OR เข้าไป ดังนี้
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} otherdomain\.com [NC,OR]
RewriteCond %{HTTP_REFERER} anotherdomain\.com
RewriteRule .* – [F]
และสำหรับ # เป็นการปิดการใช้งานของบรรทัดนั้นๆ
6. Hot Link Prevention Techniques
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteRule \.(gif|jpg|css)$ – [F]
ประโยคด้านบนหมายถึง ให้ป้องกันการเข้าถึงไฟล์นามสกุล gif, jpg, css โดยให้ลิงก์ที่สามารถเข้าถึงได้นั้นจะต้องชื่อ yourdomain.com เท่านั้น
7. Adding MIME types
AddType text/html .html .htm
AddType text/plain .txt
AddType application/pdf .pdf
AddType image/jpeg .jpeg .jpg .jpe .JPG
เป็นการระบุว่าไฟล์นามสกุลที่เราจะใช้งานในเว็บนั้นเป็นไฟล์เกี่ยวกับอะไร ซึ่งเว็บเซิฟเวอร์ต้องการที่จะรู้เพื่อช่วยในการประมวลผลไฟล์นั้นๆ จากตัวอย่างด้านบนจะเห็นว่า มีการระบุไฟล์ .html, .htm เป็นไฟล์ text ไฟล์ pdf เป็นไฟล์ application และไฟล์ jpg เป็นไฟล์รูปภาพ เป็นต้น
8. คำสั่งอื่นๆ เพิ่มเติม
เนื่องจากว่าคำสั่งของ .htaccess นั้นมีจำนวนมาก หากเราต้องการใช้งานคำสั่งอื่นๆ เพิ่มเติมนอกเหนือจากที่เขียนมาแล้ว เราสามารถเข้าไปดูได้ที่เว็บ htaccess guide ซึ่งด้านในจะบอกวิธีการใช้งานอย่างละเอียดเลย ก็ขอขอบคุณเว็บดังกล่าวไว้ ณ ที่นี้ด้วย
การใช้ .htaccess บน WordPress
สำหรับในส่วนของ WordPress นั้น เมื่อเราทำการติดตั้ง WordPress เสร็จเรียบร้อยแล้ว ระบบของ WordPress จะทำการสร้างไฟล์ .htaccess นี้ให้อัตโนมัติ เราไม่จำเป็นต้องไปทำการแก้ไขส่วนใดเลย หากเราเปิดเข้ามาดูในไฟล์ดังกล่าวจะพบกับคำสั่งเริ่มต้นดังนี้
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
ความหมายของ .htaccess ใน WordPress
RewriteBase /
RewriteRule ^index\.php$ – [L]
หมายถึงในกรณีที่เข้าหน้าเว็บปกติ เช่น https://ww.knmasters.com ให้ไปเปิดแสดงผลลิงก์หน้า https://www.knmasters.com/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
ซึ่งในส่วนนี้หมายถึง ถ้าไฟล์ที่ถูกระบุในเบราเซอร์ไม่มี หรือ ไดเร็กทอรี่ที่ถูกระบุในเบราเซอร์ไม่มี ให้เว็บไซต์ไปยังบรรทัดถัดไป ซึ่งก็คือหน้า index.php