🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

คู่มือ .htaccess ฉบับสมบูรณ์: วิธีใช้ Redirect, URL Rewriting และการจำกัดการเข้าถึง

ในซีรีส์ที่ผ่านมา เราได้ปูพื้นฐานการจัดการเซิร์ฟเวอร์มาอย่างแน่นหนา ตั้งแต่พื้นฐานของ Apache, การติดตั้ง, การตั้งค่าผ่าน `httpd.conf`, ไปจนถึงการบริหารจัดการหลายเว็บไซต์ด้วย Virtual Host คุณทำได้ดีมากครับ! และในที่สุดก็มาถึงตอนสุดท้ายของซีรีส์ Apache กันแล้ว ครั้งนี้เราจะมาเจาะลึก "ไฟล์เวทมนตร์" ที่เป็นเพื่อนแท้ที่แข็งแกร่งที่สุดในการบริหารเว็บไซต์ นั่นคือ .htaccess

"อยากจะส่งต่อหน้าเพจหนึ่งไปยัง URL ใหม่", "อยากทำให้ URL สั้นและสวยงาม", "อยากใส่รหัสผ่านให้กับไดเรกทอรีบางส่วน"... ความปรารถนาเหล่านี้ของผู้ดูแลเว็บไซต์สามารถทำให้เป็นจริงได้ด้วยไฟล์เพียงไฟล์เดียวนี้ ในบทความนี้ เราจะแนะนำตั้งแต่วิธีการใช้งานพื้นฐานของ .htaccess ไปจนถึงตัวอย่างการตั้งค่าที่ใช้ได้จริง พร้อมโค้ดที่สามารถคัดลอกไปใช้ได้ทันที หากคุณเข้าใจบทความนี้ การจัดการเว็บไซต์ของคุณจะอิสระและทรงพลังยิ่งขึ้นอย่างแน่นอน!


.htaccess คืออะไร? พื้นฐานที่ต้องรู้

.htaccess คือไฟล์ตั้งค่าที่ใช้ควบคุมการทำงานของเซิร์ฟเวอร์ในระดับไดเรกทอรี (โฟลเดอร์) ที่ Apache ทำงานอยู่ หากเปรียบ `httpd.conf` เป็นกฎหมายของทั้งประเทศ .htaccess ก็เปรียบเสมือนกฎหมายท้องถิ่นที่ใช้บังคับเฉพาะในพื้นที่นั้นๆ เสน่ห์ที่ยิ่งใหญ่ที่สุดของมันคือความสามารถในการใช้กฎเกณฑ์เฉพาะสำหรับแต่ละเว็บไซต์หรือแต่ละโฟลเดอร์ได้โดยไม่ต้องไปยุ่งกับการตั้งค่าหลักของเซิร์ฟเวอร์

เงื่อนไขสำคัญที่สุดในการเปิดใช้งาน .htaccess

ในการใช้ `.htaccess` จำเป็นต้องได้รับอนุญาตให้เขียนทับการตั้งค่าสำหรับไดเรกทอรีนั้นๆ ซึ่งสามารถตั้งค่าได้ในบล็อก <Directory> ที่ระบุไดเรกทอรีเป้าหมายในไฟล์ `httpd.conf` หรือไฟล์ตั้งค่า Virtual Host (`httpd-vhosts.conf`)

โปรดตรวจสอบให้แน่ใจว่ามีการระบุบรรทัด AllowOverride All อยู่ หากตั้งค่าเป็น None การเขียนอะไรลงใน `.htaccess` ก็จะถูกเพิกเฉย จนกว่าคุณจะเปลี่ยนเป็น All แล้วรีสตาร์ท Apache

<Directory "/path/to/your/site">
    # การตั้งค่านี้จำเป็นต้องเป็น "All"
    AllowOverride All
    Require all granted
</Directory>

เพียงแค่ตั้งค่านี้ให้ถูกต้อง ที่เหลือก็แค่สร้างไฟล์ชื่อ `.htaccess` ด้วยโปรแกรมแก้ไขข้อความ แล้วอัปโหลดไปยังไดเรกทอรีที่ต้องการใช้กฎเกณฑ์นั้นๆ ก็เป็นอันเตรียมพร้อมเสร็จสิ้น


1. การ Redirect: นำทางผู้ใช้ไปยังหน้าอื่น

Redirect คือฟังก์ชันที่ใช้ส่งต่อการเข้าถึงจาก URL เก่าไปยัง URL ใหม่อัตโนมัติ เมื่อมีการย้ายเว็บไซต์หรือเปลี่ยน URL ของหน้าเว็บ ซึ่งมีความสำคัญอย่างยิ่งในมุมมองของ SEO

การ Redirect หน้าเพจที่ระบุ

นี่คือการ Redirect ที่ง่ายที่สุด โดยจะส่งต่อการเข้าถึง `old.html` ไปยัง `new.html` "301" หมายถึงการส่งต่อนี้เป็นแบบ "ถาวร" เพื่อแจ้งให้เครื่องมือค้นหาทราบว่า URL ได้ย้ายไปอย่างสมบูรณ์แล้ว

Redirect 301 /old.html http://www.example.com/new.html

2. การเขียน URL ใหม่: ทำให้ URL สวยงามด้วย mod_rewrite

mod_rewrite เป็นโมดูลที่ทรงพลังเป็นพิเศษใน Apache ซึ่งสามารถเขียน URL ใหม่ (Rewrite) เบื้องหลังได้ ทำให้ URL ที่ผู้ใช้เห็นยังคงสวยงาม ในขณะที่เซิร์ฟเวอร์ภายในประมวลผลเป็น URL อื่น

ในการใช้ mod_rewrite ก่อนอื่นต้องมีการประกาศว่า "จะใช้เครื่องมือเขียนใหม่"

RewriteEngine On

การรวม "มี www / ไม่มี www"

ไม่ว่าจะเข้าถึงด้วย `example.com` หรือ `www.example.com` ก็จะถูกรวม URL ให้เป็น `www.example.com` ทั้งหมด นี่เป็นการตั้งค่าที่มีประสิทธิภาพมากในทาง SEO เพื่อไม่ให้คะแนนของเว็บไซต์กระจัดกระจาย

RewriteEngine On
# หากชื่อโฮสต์ที่เข้าถึงคือ 'example.com'
RewriteCond %{HTTP_HOST} ^example\.com$
# ให้ redirect URL ทั้งหมดไปยัง 'www.example.com' แบบถาวร
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

บังคับใช้ SSL: บังคับการเข้าถึงจาก http ไปยัง https

ในมุมมองด้านความปลอดภัย ปัจจุบันการทำให้เว็บไซต์เป็น SSL ตลอดเวลา (การสื่อสารผ่าน https) เป็นสิ่งจำเป็น หากมีการเข้าถึงผ่าน http ก็จะถูกส่งต่อไปยัง https โดยอัตโนมัติ

RewriteEngine On
# หากการเชื่อมต่อไม่ใช่ https
RewriteCond %{HTTPS} off
# ให้ redirect URL ทั้งหมดไปยังพาธเดียวกันบน https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

ทำให้ URL แบบไดนามิกดูเหมือนสแตติก

ตัวอย่างเช่น ทำให้ URL ที่มีพารามิเตอร์อย่าง `example.com/user.php?id=123` ดูเหมือน URL ที่เรียบง่ายและเข้าใจง่ายอย่าง `example.com/user/123`

RewriteEngine On
# หาก URL อยู่ในรูปแบบ 'user/ตัวเลข'
RewriteRule ^user/([0-9]+)/?$ /user.php?id=$1 [L]

การตั้งค่านี้ช่วยให้ผู้ใช้ยังคงเห็น URL ที่สวยงาม และนักพัฒนาสามารถจัดการข้อมูลผ่านพารามิเตอร์ได้ง่ายขึ้น


3. การจำกัดการเข้าถึง: ใส่กุญแจให้พื้นที่เฉพาะ

คุณสามารถตั้งค่าการยืนยันตัวตนด้วยรหัสผ่าน (Basic Authentication) สำหรับไดเรกทอรีที่คุณต้องการให้เฉพาะบางคนเข้าถึงได้ เช่น หน้าสำหรับสมาชิก

การตั้งค่า Basic Authentication

การยืนยันตัวตนแบบพื้นฐานต้องการไฟล์ 2 ไฟล์คือ `.htaccess` และ `.htpasswd` ที่ใช้เก็บรหัสผ่าน ก่อนอื่น ให้วาง `.htaccess` ที่มีเนื้อหาต่อไปนี้ในไดเรกทอรีที่ต้องการใส่กุญแจ

AuthType Basic
# ข้อความที่แสดงในกล่องโต้ตอบการยืนยันตัวตน
AuthName "Secret Area"
# ระบุตำแหน่งของไฟล์ที่เก็บชื่อผู้ใช้และรหัสผ่าน
AuthUserFile /path/to/.htpasswd
# อนุญาตให้เข้าถึงเฉพาะผู้ใช้ที่ผ่านการยืนยันตัวตนแล้วเท่านั้น
Require valid-user

สำคัญ: พาธของ `.htpasswd` ที่ระบุใน `AuthUserFile` ต้องเป็นตำแหน่งที่ปลอดภัยและไม่สามารถเข้าถึงได้จากเว็บ (นอก Document Root)


การสร้างไฟล์ .htpasswd

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

กรณีสร้างผู้ใช้คนแรก (ใช้ `-c` เพื่อสร้างไฟล์ใหม่):

htpasswd -c /path/to/.htpasswd user1

กรณีเพิ่มผู้ใช้คนที่สองเป็นต้นไป (ไม่ต้องใส่ `-c`):

htpasswd /path/to/.htpasswd user2

เมื่อรันคำสั่ง ระบบจะขอให้คุณป้อนรหัสผ่าน เมื่อป้อนเสร็จสิ้น ไฟล์ `.htpasswd` จะถูกสร้างหรืออัปเดตในพาธที่ระบุ


ตัวอย่างการตั้งค่าที่มีประโยชน์อื่นๆ

การแสดงหน้าข้อผิดพลาดแบบกำหนดเอง

เมื่อเกิดข้อผิดพลาดเช่น "404 Not Found" คุณสามารถแสดงหน้าเพจที่ออกแบบเองแทนหน้าข้อผิดพลาดของเซิร์ฟเวอร์ที่ดูจืดชืดได้

ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html

การปฏิเสธการเข้าถึงจาก IP Address ที่ระบุ

บล็อกการเข้าถึงที่ไม่พึงประสงค์หรือการเข้าถึงจาก IP Address ที่ระบุ

Require all granted
Require not ip 123.45.67.89
Require not ip 192.168.1.0/24

สรุป

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

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

การได้เรียนรู้เบื้องหลังของเว็บเซิร์ฟเวอร์จะทำให้ทักษะในฐานะ Web Creator ของคุณลึกซึ้งยิ่งขึ้น หวังว่าชีวิตการสร้างสรรค์เว็บของคุณต่อจากนี้จะสนุกและสร้างสรรค์ยิ่งขึ้นไปอีก!