คำสั่ง .htaccess สำหรับ Apache Web Server บน Hosting

📋 สารบัญ

  1. .htaccess คืออะไร ทำงานอย่างไร
  2. วางไฟล์ไว้ที่ไหน และตั้ง Permission อย่างไร
  3. Redirect URL — 301 และ 302
  4. URL Rewriting ด้วย mod_rewrite
  5. ป้องกัน Directory Listing
  6. กำหนด Custom Error Pages
  7. บังคับใช้ HTTPS
  8. ป้องกัน Hotlinking รูปภาพ
  9. ตั้งค่า Browser Caching
  10. ความปลอดภัยพื้นฐานด้วย .htaccess
  11. แก้ปัญหา .htaccess ไม่ทำงาน
  12. คำถามที่พบบ่อย (FAQ)

ไฟล์ .htaccess คือเครื่องมือที่ผู้ใช้ Hosting ทุกคนควรรู้จัก ไม่ว่าจะเป็นการ Redirect URL, ป้องกันความปลอดภัย, ตั้งค่า HTTPS หรือเพิ่มประสิทธิภาพเว็บ — ทั้งหมดทำได้ผ่านไฟล์นี้ไฟล์เดียว บทความนี้รวบรวมคำสั่งที่ใช้บ่อยในชีวิตจริงพร้อมอธิบายการทำงานให้เข้าใจง่าย

1. .htaccess คืออะไร ทำงานอย่างไร

.htaccess (Hypertext Access) คือไฟล์ configuration ของ Apache Web Server ที่ทำหน้าที่กำหนดพฤติกรรมของเซิร์ฟเวอร์ในระดับ directory ชื่อไฟล์เริ่มต้นด้วยจุด (.) ทำให้มองไม่เห็นใน file manager ของระบบปกติ

เมื่อมี request เข้ามา Apache จะตรวจสอบไฟล์ .htaccess ในทุก directory ตั้งแต่ root จนถึง directory ปลายทาง และนำกฎทั้งหมดมาประมวลผล ข้อดีคือไม่ต้อง restart server เมื่อแก้ไข — มีผลทันที

ประโยชน์หลักของ .htaccess

ฟีเจอร์ตัวอย่างการใช้งาน
Redirect URLเปลี่ยนโดเมนเก่า → ใหม่, 301/302
URL Rewritingแปลง /product?id=5 → /product/5
ป้องกัน Directory Listingไม่ให้เห็นรายการไฟล์ใน folder
Custom Error Pagesหน้า 404 แบบกำหนดเอง
บังคับ HTTPSเปลี่ยน http → https อัตโนมัติ
Hotlink Protectionกัน bandwidth theft จากรูปภาพ
Browser Cachingเพิ่มความเร็วด้วย cache header
ความปลอดภัยซ่อน header, ป้องกัน injection
💡 รู้ไหม?

Hosting ของ AsiaGB รองรับ .htaccess และ mod_rewrite พร้อมใช้งานแล้ว คุณไม่ต้องขอเปิด module เพิ่มเติม

2. วางไฟล์ไว้ที่ไหน และตั้ง Permission อย่างไร

ไฟล์ .htaccess ต้องวางใน directory ที่ต้องการควบคุม ถ้าต้องการให้ใช้งานทั้งเว็บให้วางที่ public_html/

/home/username/
└── public_html/
    ├── .htaccess     ← ครอบคลุมทั้งเว็บ
    ├── index.php
    └── admin/
        └── .htaccess ← ครอบคลุมเฉพาะ /admin/

Permission ที่แนะนำ: ตั้งเป็น 644 (อ่านได้ทุกคน แก้ไขได้เฉพาะ owner) ห้ามตั้งเป็น 777 เพราะเป็นความเสี่ยงด้านความปลอดภัย

สร้างหรือแก้ไขผ่าน DirectAdmin → File Manager โดยแสดงไฟล์ที่ซ่อนอยู่ (Show Hidden Files) หรือ upload ผ่าน FTP ด้วย FileZilla

3. Redirect URL — 301 และ 302

การ Redirect เป็นคำสั่งที่ใช้บ่อยที่สุด เช่น เมื่อเปลี่ยนโดเมน ย้าย URL หรือปรับโครงสร้างเว็บ

301 Permanent Redirect (ย้ายถาวร)

# Redirect URL เดียว
Redirect 301 /old-page.html https://example.com/new-page.html

# Redirect ทั้ง domain เก่าไป domain ใหม่
RewriteEngine On
RewriteCond %{HTTP_HOST} ^oldsite\.com$ [NC]
RewriteRule ^(.*)$ https://newsite.com/$1 [L,R=301]

302 Temporary Redirect (redirect ชั่วคราว)

Redirect 302 /promo.html https://example.com/sale.html
⚠️ ข้อควรระวัง

ใช้ 301 เมื่อย้าย URL ถาวรเท่านั้น เพราะ browser และ Google จะ cache ไว้นาน ถ้าต้องการ undone ในภายหลัง ให้ใช้ 302 แทน

Redirect โดเมนไม่มี www ไป www (หรือกลับกัน)

# บังคับ www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301]

# บังคับไม่มี www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]

4. URL Rewriting ด้วย mod_rewrite

URL Rewriting ช่วยให้ URL มีความสวยงาม (Pretty URL) เหมาะกับ SEO และ User Experience เช่น แปลง index.php?page=about เป็น /about/

เปิดใช้งาน mod_rewrite

RewriteEngine On
RewriteBase /

ตัวอย่าง: WordPress Pretty Permalink

# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

ตัวอย่าง: ลบ .php extension จาก URL

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]

ตัวอย่าง: แปลง query string เป็น URL สวย

# /product?id=5 → /product/5
RewriteEngine On
RewriteRule ^product/([0-9]+)/?$ product.php?id=$1 [L,QSA]
Flagความหมาย
[L]Last — หยุดประมวลผล rule ถัดไป
[R=301]Redirect พร้อม status code
[NC]No Case — ไม่สนใจตัวพิมพ์เล็ก/ใหญ่
[QSA]Query String Append — รักษา query string เดิม
[NE]No Escape — ไม่ escape อักขระพิเศษ

5. ป้องกัน Directory Listing

ค่าเริ่มต้นของ Apache บางระบบอาจแสดงรายการไฟล์ใน directory ที่ไม่มี index file ซึ่งเป็นความเสี่ยงด้านความปลอดภัย

# ปิด Directory Listing ทั้งหมด
Options -Indexes

# หรือเปิดเฉพาะ directory ที่ต้องการ
Options +Indexes
✅ แนะนำ

เพิ่ม Options -Indexes ใน .htaccess ที่ root เสมอ เพื่อป้องกันไม่ให้ผู้เยี่ยมชมเห็นโครงสร้างไฟล์ของคุณ

6. กำหนด Custom Error Pages

แทนที่จะแสดงหน้า error แบบ server default ที่ดูน่ากลัว คุณสามารถกำหนดหน้า error page ของตัวเองได้

# Custom Error Pages
ErrorDocument 400 /errors/400.html
ErrorDocument 401 /errors/401.html
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html

สร้างไฟล์ HTML ที่ public_html/errors/404.html โดยออกแบบให้เหมาะกับแบรนด์ของคุณ พร้อม link ย้อนกลับ homepage

Error Pages ที่ควรมี

Error Codeความหมายสาเหตุบ่อย
400Bad RequestRequest มีรูปแบบผิด
403Forbiddenไม่มีสิทธิ์เข้าถึง
404Not Foundหน้าไม่มีอยู่
500Internal Server Errorโค้ดหรือ config ผิดพลาด
503Service Unavailableเซิร์ฟเวอร์ load สูงชั่วคราว

7. บังคับใช้ HTTPS

การบังคับ HTTPS เป็นมาตรฐานของเว็บสมัยใหม่ ช่วยเรื่องความปลอดภัยและ SEO

# บังคับ HTTPS ทั้งเว็บ (ใช้กับ non-load-balancer)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# กรณีอยู่หลัง Load Balancer / Reverse Proxy (เช่น Cloudflare)
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
ℹ️ หมายเหตุ

ต้องติดตั้ง SSL Certificate ก่อนบังคับ HTTPS — ถ้าใช้ Hosting ของ AsiaGB สามารถขอ Let's Encrypt ฟรีผ่าน DirectAdmin ได้เลย

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

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|svg)$ - [F,L]

เปลี่ยน yourdomain.com เป็นโดเมนของคุณ กฎนี้จะส่ง 403 Forbidden เมื่อเว็บอื่น hotlink รูปของคุณ

9. ตั้งค่า Browser Caching

Browser Caching ช่วยให้ browser เก็บไฟล์ static ไว้ในเครื่อง ทำให้โหลดเร็วขึ้นในการเยี่ยมชมครั้งถัดไป — มีผลตรงกับ Core Web Vitals

<IfModule mod_expires.c>
  ExpiresActive On

  # รูปภาพ — cache 1 ปี
  ExpiresByType image/jpg "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
  ExpiresByType image/gif "access plus 1 year"
  ExpiresByType image/svg+xml "access plus 1 year"
  ExpiresByType image/x-icon "access plus 1 year"

  # CSS และ JS — cache 1 เดือน
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"
  ExpiresByType text/javascript "access plus 1 month"

  # Font — cache 1 ปี
  ExpiresByType font/woff "access plus 1 year"
  ExpiresByType font/woff2 "access plus 1 year"
  ExpiresByType application/font-woff "access plus 1 year"
  ExpiresByType application/font-woff2 "access plus 1 year"

  # HTML — cache สั้น (เพื่อให้ update ได้เร็ว)
  ExpiresByType text/html "access plus 1 hour"
</IfModule>

# Cache-Control header
<IfModule mod_headers.c>
  <FilesMatch "\.(jpg|jpeg|png|webp|gif|ico|css|js|woff|woff2)$">
    Header set Cache-Control "public, max-age=31536000"
  </FilesMatch>
</IfModule>

10. ความปลอดภัยพื้นฐานด้วย .htaccess

เพิ่มชั้นป้องกันเพิ่มเติมด้วยคำสั่งด้านความปลอดภัยที่ควรใส่ในทุกเว็บ

ซ่อน Server Information

ServerSignature Off

# ซ่อน PHP version header
<IfModule mod_headers.c>
  Header unset X-Powered-By
  Header always unset X-Powered-By
</IfModule>

เพิ่ม Security Headers

<IfModule mod_headers.c>
  # ป้องกัน Clickjacking
  Header always set X-Frame-Options "SAMEORIGIN"

  # ป้องกัน XSS
  Header always set X-XSS-Protection "1; mode=block"

  # ป้องกัน MIME Sniffing
  Header always set X-Content-Type-Options "nosniff"

  # HTTPS Strict Transport Security (HSTS)
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

  # Referrer Policy
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

ป้องกันการเข้าถึงไฟล์สำคัญ

# ป้องกัน .htaccess และ .htpasswd
<FilesMatch "^\.ht">
  Require all denied
</FilesMatch>

# ป้องกันไฟล์ backup ที่อาจมีข้อมูลสำคัญ
<FilesMatch "\.(bak|backup|sql|log|old|orig)$">
  Require all denied
</FilesMatch>

# ป้องกัน wp-config.php (WordPress)
<Files "wp-config.php">
  Require all denied
</Files>

จำกัด HTTP Methods

<LimitExcept GET POST HEAD>
  Require all denied
</LimitExcept>

11. แก้ปัญหา .htaccess ไม่ทำงาน

⚠️ Error 500 หลัง save .htaccess

ถ้าเว็บแสดง 500 Internal Server Error ทันทีหลังแก้ไข .htaccess แสดงว่ามี syntax error ให้ตรวจสอบทุกบรรทัดว่าเขียนถูกต้อง และ comment (#) ไม่ได้อยู่กลางคำสั่ง

ปัญหาสาเหตุที่เป็นไปได้วิธีแก้
Redirect ไม่ทำงานลืมเปิด RewriteEngine Onเพิ่ม RewriteEngine On ก่อน RewriteRule
Loop redirectเงื่อนไขไม่ครอบคลุม HTTPSใช้ RewriteCond ตรวจ %{HTTPS} ก่อน
404 ทุก URLRewriteBase ผิดแก้ RewriteBase ให้ตรงกับ path จริง
Cache ไม่ทำงานmod_expires ไม่ได้เปิดใช้ mod_headers แทน หรือติดต่อ support
Security header ไม่มีผลmod_headers ไม่ได้เปิดตรวจสอบ module ที่เปิดอยู่

วิธีทดสอบ .htaccess อย่างง่ายคือใช้เครื่องมือออนไลน์เช่น htaccess tester หรือดู Error Log ใน DirectAdmin → Logs เพื่อหาสาเหตุที่แน่ชัด

12. คำถามที่พบบ่อย (FAQ)

.htaccess คืออะไร ใช้ทำอะไรได้บ้าง?

.htaccess คือไฟล์ configuration ของ Apache Web Server ที่ช่วยให้คุณตั้งค่าเซิร์ฟเวอร์ในระดับ directory ได้โดยไม่ต้องแก้ไขไฟล์ httpd.conf หลัก ใช้ทำ Redirect, Rewrite URL, ป้องกัน Directory Listing, กำหนด Custom Error Page, บังคับ HTTPS และตั้งค่า Browser Caching

วางไฟล์ .htaccess ไว้ที่ไหนบน Hosting?

วางที่ public_html/ หรือ root directory ของเว็บไซต์ เพื่อให้ครอบคลุมทั้งเว็บ หรือวางใน subdirectory เพื่อควบคุมเฉพาะ folder นั้นผ่าน DirectAdmin File Manager

ทำไม .htaccess ถึงไม่ทำงาน?

สาเหตุที่พบบ่อย: AllowOverride ถูกตั้งเป็น None, mod_rewrite ไม่ได้เปิด, ชื่อไฟล์ผิด, syntax ผิดพลาด หรือ Permission ไม่ถูกต้อง (ควรเป็น 644)

Redirect 301 กับ 302 ต่างกันอย่างไร?

301 (Moved Permanently) ใช้เมื่อย้าย URL ถาวร — Google จะส่ง link equity ไปยัง URL ใหม่ด้วย ส่วน 302 (Found/Temporary Redirect) ใช้เมื่อ redirect ชั่วคราวเท่านั้น Google ยังจำ URL เดิมไว้

ใช้ .htaccess บน Hosting DirectAdmin ได้เลยไหม?

ได้เลย Hosting ของ AsiaGB ใช้ Apache ที่รองรับ .htaccess พร้อม mod_rewrite เปิดใช้งานแล้ว สร้างหรือแก้ไขได้ผ่าน File Manager ใน DirectAdmin หรือ upload ผ่าน FTP

.htaccess ส่งผลต่อความเร็วเว็บอย่างไร?

.htaccess ทำงานทุกครั้งที่มี request เข้ามา มีผลต่อ performance เล็กน้อย แต่การใช้ Browser Caching ผ่าน .htaccess กลับช่วยเพิ่มความเร็วได้มากกว่า สำหรับเว็บทั่วไปผลกระทบจากการมี .htaccess น้อยมาก

สรุป: .htaccess เครื่องมือที่ทรงพลังบน Hosting

ไฟล์ .htaccess เป็นเครื่องมือที่ขาดไม่ได้สำหรับการบริหาร Hosting อย่างมืออาชีพ ตั้งแต่การ Redirect URL, ทำ SEO-friendly URL, ป้องกันความปลอดภัย, บังคับ HTTPS ไปจนถึงเพิ่มความเร็วด้วย Browser Caching

สิ่งที่ควรทำทุกเว็บ:

Hosting รองรับ .htaccess พร้อมใช้งาน

AsiaGB Hosting ใช้ Apache + DirectAdmin รองรับ .htaccess และ mod_rewrite เต็มรูปแบบ พื้นที่ SSD เริ่มต้น 500 บาท/เดือน Uptime 99%

ดูแพ็กเกจ Hosting