.htaccess คืออะไร ใช้งานอย่างไร

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

เมื่อเราต้องการทำการปรับเปลี่ยนค่าที่ถูกตั้งเอาไว้บน Apace Web Server เราสามารถทำการปรับเปลี่ยนค่าที่ตั้งไว้ที่ไฟล์นี้ได้โดยไม่ต้องเข้าไปแก้ไขที่เว็บเซิฟเวอร์จริง ฟังก์ชั่นหรือคำสั่งพื้นฐานได้แก่ ฟังก์ชั่นการรีไดเร็กหน้าเว็บ เช่น ในกรณีเกิดหน้า 404 File Not Found หรือการป้องกันรหัสผ่าน การป้องกันการนำลิงก์รูปของเว็บไซต์ของเราไปใช้งานในเว็บอื่นโดยไม่ได้รับอนุญาตเป็นต้น

วิธีการใช้งาน .htaccess

เราสามารถสร้างไฟล์ .htaccess ได้โดยทำการสร้างไฟล์จาก Text Editor ต่างๆ ได้ ยกตัวอย่างเช่น Notepad, WordPad, TextPad, Sublime Text อย่างใดอย่างหนึ่ง แล้วทำการบันทึกไฟล์ให้ชื่อ .htaccess (ต้องมีจุดอยู่ด้านหน้าด้วย) แล้วนำไปใส่ไว้ในโฟลเดอร์หลัก public_html / htdocs หรือโฟลเดอร์ที่เราต้องการควบคุมโดยจะครอบคลุมไฟล์ที่อยู่ภายในโฟลเดอร์นั้นทั้งหมด ภายในไฟล์ดังกล่าวเราสามารถใส่คำสั่งต่างๆ ลงภายในได้

คำสั่งที่ใช้งานบ่อยๆ ใน .htaccess

Redirects

Redirect /old_dir/ http://www.yourdomain.com/new_dir/index.html

คำสั่งนี้เป็นคำสั่งที่แจ้งให้ Apache Web Server ทำการรีไดเร็กหรือเปลี่ยนหน้าจากหน้าเก่าไปยังหน้าใหม่ ใช้เมื่อในกรณีที่เราเปลี่ยนชื่อลิงก์ URL จากตัวอย่างจะเห็นได้ว่าเราทำการแจ้งให้ทำการรีไดเร็กจากโฟลเดอร์เก่าที่ชื่อ old_dir ไปยังโฟลเดอร์ใหม่ที่ชื่อ new_dir โดยมีชื่อไฟล์เหมือนเดิมคือ index.html ครับ

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

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

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 เท่านั้นครับ

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]

และสำหรับ # เป็นการปิดการใช้งานของบรรทัดนั้นๆ ครับ

สอน SEO
สอน SEO

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 เท่านั้น

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 เป็นไฟล์รูปภาพ เป็นต้น

คำสั่งอื่นๆ เพิ่มเติม

เนื่องจากว่าคำสั่งของ .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://themevilles.com/ ให้ไปเปิดแสดงผลลิงก์หน้า https://themevilles.com/index.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

ซึ่งในส่วนนี้หมายถึง ถ้าไฟล์ที่ถูกระบุในเบราเซอร์ไม่มี หรือ ไดเร็กทอรี่ที่ถูกระบุในเบราเซอร์ไม่มี ให้เว็บไซต์ไปยังบรรทัดถัดไป ซึ่งก็คือหน้า index.php ครับ

สอน WordPress หรือ WooCommerce
สอน WordPress หรือ WooCommerce

มาถึงตรงนี้แล้ว หวังว่าเพื่อนๆ คงเข้าใจการใช้งานของ .htaccess มากขึ้นนะครับ แต่ถ้าใครเอาไปใช้แล้วเกิดแสดงผลผิดพลาดขึ้นมาและแก้ไม่ได้ก็ให้ลบบรรทัดที่เราเพิ่มเข้าไปทิ้งซะนะครับ ลองไปเล่นดูกันครับ เดี๋ยวบทความหน้าจะเกี่ยวกับอะไรมาดูกัน.. สวัสดีครับ