📋 สารบัญ
- .htaccess คืออะไร ทำงานอย่างไร
- วางไฟล์ไว้ที่ไหน และตั้ง Permission อย่างไร
- Redirect URL — 301 และ 302
- URL Rewriting ด้วย mod_rewrite
- ป้องกัน Directory Listing
- กำหนด Custom Error Pages
- บังคับใช้ HTTPS
- ป้องกัน Hotlinking รูปภาพ
- ตั้งค่า Browser Caching
- ความปลอดภัยพื้นฐานด้วย .htaccess
- แก้ปัญหา .htaccess ไม่ทำงาน
- คำถามที่พบบ่อย (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 | ความหมาย | สาเหตุบ่อย |
|---|---|---|
| 400 | Bad Request | Request มีรูปแบบผิด |
| 403 | Forbidden | ไม่มีสิทธิ์เข้าถึง |
| 404 | Not Found | หน้าไม่มีอยู่ |
| 500 | Internal Server Error | โค้ดหรือ config ผิดพลาด |
| 503 | Service 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 ได้เลย
8. ป้องกัน Hotlinking รูปภาพ
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 ไม่ทำงาน
ถ้าเว็บแสดง 500 Internal Server Error ทันทีหลังแก้ไข .htaccess แสดงว่ามี syntax error ให้ตรวจสอบทุกบรรทัดว่าเขียนถูกต้อง และ comment (#) ไม่ได้อยู่กลางคำสั่ง
| ปัญหา | สาเหตุที่เป็นไปได้ | วิธีแก้ |
|---|---|---|
| Redirect ไม่ทำงาน | ลืมเปิด RewriteEngine On | เพิ่ม RewriteEngine On ก่อน RewriteRule |
| Loop redirect | เงื่อนไขไม่ครอบคลุม HTTPS | ใช้ RewriteCond ตรวจ %{HTTPS} ก่อน |
| 404 ทุก URL | RewriteBase ผิด | แก้ 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
สิ่งที่ควรทำทุกเว็บ:
- เพิ่ม
Options -Indexesป้องกัน Directory Listing - บังคับ HTTPS ด้วย RewriteRule
- ตั้ง Custom Error Pages โดยเฉพาะ 404
- เพิ่ม Security Headers ป้องกัน XSS และ Clickjacking
- ตั้งค่า Browser Caching สำหรับ static files
Hosting รองรับ .htaccess พร้อมใช้งาน
AsiaGB Hosting ใช้ Apache + DirectAdmin รองรับ .htaccess และ mod_rewrite เต็มรูปแบบ พื้นที่ SSD เริ่มต้น 500 บาท/เดือน Uptime 99%
ดูแพ็กเกจ Hosting