คำสั่ง .htaccess ที่ควรรู้สำหรับ Web Hosting

.htaccess (Hypertext Access) คือไฟล์ตั้งค่าเล็ก ๆ ที่วางไว้ในโฟลเดอร์ของเว็บไซต์ และสั่งงาน Apache Web Server ได้โดยตรง จุดเด่นคือใช้ปรับพฤติกรรมเว็บได้โดยไม่ต้องแก้ Server Config หลักหรือมีสิทธิ์ root จึงเป็นเครื่องมือสำคัญสำหรับผู้ใช้ Shared Hosting บทความนี้รวมคำสั่ง .htaccess ที่ใช้บ่อยที่สุด ตั้งแต่การ Redirect การบล็อก IP ไปจนถึงการตั้งค่าความปลอดภัย

วิธีเข้าถึงและแก้ไข .htaccess

  1. เปิด File Manager ใน DirectAdmin
  2. เข้าไปที่โฟลเดอร์ public_html
  3. เปิด Show Hidden Files เพื่อให้มองเห็น .htaccess
  4. คลิก Edit เพื่อแก้ไข หรือสร้างไฟล์ใหม่หากยังไม่มี

Redirect 301 และ 302

ใช้เมื่อต้องการโอนผู้เยี่ยมชมไปยัง URL ใหม่:

301 Permanent Redirect (แนะนำสำหรับ SEO):

Redirect 301 /old-page.html https://www.yourdomain.com/new-page/

302 Temporary Redirect:

Redirect 302 /promo.html https://www.yourdomain.com/sale/

บังคับ HTTPS (Force HTTPS)

เพิ่มคำสั่งนี้เพื่อบังคับทุก Request ให้ใช้ HTTPS:

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Block IP ที่ไม่ต้องการ

ป้องกัน IP หรือช่วง IP ที่รบกวนเว็บไซต์:

Order allow,deny

Deny from 192.168.1.1

Deny from 10.0.0.0/8

Allow from all

Password Protect Directory

ป้องกันโฟลเดอร์ด้วยรหัสผ่านสำหรับพื้นที่ Admin หรือ Staging:

AuthType Basic

AuthName "Protected Area"

AuthUserFile /home/username/.htpasswd

Require valid-user

Cache-Control Headers

ตั้งค่า Browser Cache เพื่อให้ไฟล์ Static โหลดเร็วขึ้น:

<IfModule mod_expires.c>

ExpiresActive On

ExpiresByType image/jpeg "access plus 1 year"

ExpiresByType text/css "access plus 1 month"

ExpiresByType application/javascript "access plus 1 month"

</IfModule>

Custom Error Pages

ตั้งหน้า Error แบบ Custom แทนหน้า Default ของ Apache:

ErrorDocument 404 /404.html

ErrorDocument 500 /500.html

ชุดคำสั่ง .htaccess แยกตามวัตถุประสงค์ (พร้อมใช้)

หัวข้อก่อนหน้านี้แสดงคำสั่งทีละบรรทัด ในส่วนนี้เราจัดกลุ่มคำสั่งที่ใช้บ่อยให้เป็นชุดสมบูรณ์ คัดลอกไปวางใน .htaccess บนโฮสติ้ง Apache + DirectAdmin ของ AsiaGB ได้ทันที เพียงปรับชื่อโดเมนและพาธให้ตรงกับเว็บไซต์ของคุณ แต่ละชุดทำงานแยกอิสระ จะใช้ชุดเดียวหรือหลายชุดรวมกันก็ได้

1. บังคับ www หรือ non-www ให้สม่ำเสมอ

เลือกใช้ชุดใดชุดหนึ่งเท่านั้น เพื่อให้ทุก URL ชี้ไปรูปแบบเดียว ช่วยรวมคะแนน SEO และกัน Duplicate Content:

# บังคับเป็น non-www (asiagb.com)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]

# หรือบังคับเป็น www (www.example.com)
# RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301]

2. บังคับ HTTPS พร้อมรักษา www/non-www

ต่อยอดจากหัวข้อ Force HTTPS ด้านบน โดยรวมการบังคับ HTTPS เข้ากับ HSTS เพื่อให้เบราว์เซอร์จำว่าให้ใช้ HTTPS เสมอ:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# แจ้งเบราว์เซอร์ให้ใช้ HTTPS อย่างน้อย 1 ปี
<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>

3. หน้า Error แบบ Custom ครบชุด

กำหนดหน้า Error ที่ออกแบบเองให้ครบทุกรหัสที่พบบ่อย เพื่อรักษาแบรนด์และช่วยให้ผู้ใช้หาทางต่อได้:

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

4. บล็อก IP, User-Agent และบอทที่ไม่ต้องการ

นอกจากบล็อก IP รายตัวแล้ว ยังบล็อก Bad Bot จาก User-Agent เพื่อลดภาระเซิร์ฟเวอร์และการ Scrape ข้อมูลได้:

# บล็อก IP และช่วง IP (ไวยากรณ์ Apache 2.4)
<RequireAll>
  Require all granted
  Require not ip 192.168.1.50
  Require not ip 203.0.113.0/24
</RequireAll>

# บล็อกบอทจากชื่อ User-Agent
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (AhrefsBot|MJ12bot|SemrushBot|DotBot) [NC]
RewriteRule .* - [F,L]

5. ป้องกันไฟล์สำคัญและปิดการดูรายชื่อไฟล์

ซ่อนไฟล์ตั้งค่าที่ละเอียดอ่อน และปิด Directory Listing เพื่อไม่ให้ผู้ใช้เห็นรายชื่อไฟล์เมื่อไม่มี index:

# ปิดการแสดงรายชื่อไฟล์ในโฟลเดอร์
Options -Indexes

# ป้องกันการเข้าถึงไฟล์ที่ขึ้นต้นด้วยจุด และไฟล์ตั้งค่า
<FilesMatch "^\.|\.(env|ini|log|sql|bak)$">
  Require all denied
</FilesMatch>

6. ตั้ง Cache (Expires) และบีบอัด Gzip

สองคำสั่งนี้ช่วยเพิ่มความเร็วเว็บไซต์ได้ชัดเจน Expires ลดการโหลดซ้ำของไฟล์ Static ส่วน Gzip บีบอัดข้อความก่อนส่งให้เบราว์เซอร์:

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"
  ExpiresByType text/html "access plus 1 day"
</IfModule>

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/css text/plain
  AddOutputFilterByType DEFLATE application/javascript application/json
</IfModule>

ตารางอ้างอิงคำสั่ง .htaccess ที่ใช้บ่อย

สรุปคำสั่งหลักและหน้าที่ของแต่ละตัว ใช้เป็นตารางอ้างอิงเร็วเมื่อต้องการแก้ไฟล์โดยไม่ต้องไล่อ่านทั้งบทความ:

คำสั่ง / Directive หน้าที่ โมดูลที่ต้องใช้
RewriteEngine Onเปิดการทำงานของกฎ Rewrite ทั้งหมดmod_rewrite
Redirect 301ย้าย URL ถาวร (ดีต่อ SEO)mod_alias
RewriteRuleเขียน URL ใหม่หรือ Redirect ตามเงื่อนไขmod_rewrite
ErrorDocumentกำหนดหน้า Error แบบ Customcore
Options -Indexesปิดการแสดงรายชื่อไฟล์ในโฟลเดอร์core
Require not ipบล็อก IP (Apache 2.4)mod_authz_core
ExpiresByTypeตั้งอายุ Cache ของไฟล์ตามชนิดmod_expires
AddOutputFilterByType DEFLATEบีบอัด Gzip ก่อนส่งข้อมูลmod_deflate
Header setเพิ่ม HTTP Header เช่น HSTSmod_headers
AuthType Basicป้องกันโฟลเดอร์ด้วยรหัสผ่านmod_auth_basic

ลำดับการทำงานและข้อควรระวัง

กฎใน .htaccess ไม่ได้ทำงานแบบสุ่ม แต่มีลำดับชัดเจน การเข้าใจลำดับนี้ช่วยป้องกันปัญหา Redirect ผิด เว็บค้าง หรือ Error 500 ได้มาก

ลำดับของกฎ (Rule Order)

Apache อ่านคำสั่งจากบนลงล่าง สำหรับ mod_rewrite กฎที่ลงท้ายด้วย [L] (Last) จะหยุดประมวลผลกฎที่เหลือทันที จึงควรวางกฎที่เจาะจง เช่น Redirect ของหน้าเฉพาะ ไว้ก่อนกฎทั่วไป เช่น การบังคับ HTTPS เพื่อไม่ให้กฎกว้างเกินไปทำงานก่อนแล้วบดบังกฎย่อย

ระวัง Redirect Loop

เมื่อรวมการบังคับ HTTPS กับ www/non-www เข้าด้วยกัน หากเขียนเงื่อนไขไม่รัดกุมอาจเกิด Redirect วนไม่รู้จบ จนเบราว์เซอร์ขึ้น ERR_TOO_MANY_REDIRECTS เสมอใช้ RewriteCond ตรวจสถานะปัจจุบันก่อน Redirect เช่น ตรวจ %{HTTPS} off ก่อนสั่งให้เปลี่ยนเป็น HTTPS

เข้าใจ Error 500 จาก .htaccess

Error 500 ส่วนใหญ่เกิดจากไวยากรณ์ผิด การอ้างถึงโมดูลที่เซิร์ฟเวอร์ไม่ได้เปิด หรือวงเล็บ <IfModule> ไม่ปิด การห่อคำสั่งไว้ใน <IfModule ...> ช่วยลดความเสี่ยง เพราะ Apache จะข้ามคำสั่งภายในไปหากไม่มีโมดูลนั้น แทนที่จะหยุดทำงานทั้งเว็บ

เรื่อง Cache ที่มักเข้าใจผิด

หลังแก้คำสั่ง Expires หรือ Cache แล้วเว็บอาจยังแสดงไฟล์เวอร์ชันเก่า เพราะเบราว์เซอร์เก็บไฟล์ไว้ตามอายุที่ตั้งไว้ก่อนหน้า ให้ทดสอบด้วยหน้าต่าง Incognito หรือ Hard Refresh (Ctrl+F5) และอย่าลืมว่าการตั้ง Cache นานเกินไปกับไฟล์ที่อัปเดตบ่อยจะทำให้ผู้ใช้เห็นเนื้อหาเก่า

ทดสอบ .htaccess อย่างปลอดภัย

เนื่องจากความผิดพลาดเพียงบรรทัดเดียวอาจทำให้ทั้งเว็บล่ม ควรมีวิธีทดสอบที่ลดความเสี่ยง ทำตามขั้นตอนนี้ทุกครั้งที่แก้ไฟล์จริง:

  1. สำรองไฟล์เดิมก่อนเสมอ — คัดลอก .htaccess เป็น .htaccess.bak ใน File Manager ของ DirectAdmin ก่อนแก้ทุกครั้ง
  2. แก้ทีละชุดคำสั่ง — เพิ่มกฎทีละกลุ่มแล้วทดสอบ ไม่วางหลายชุดพร้อมกัน เพื่อให้รู้ว่าชุดใดเป็นต้นเหตุหากเกิดปัญหา
  3. เปิดหลาย URL เพื่อตรวจ — ทดสอบทั้งหน้าแรก หน้า HTTPS หน้า www และ non-www รวมถึงหน้า 404 ว่าทำงานตามที่ตั้งใจ
  4. ดู Error Log — หากเว็บขึ้น 500 เปิด Error Log ใน DirectAdmin จะเห็นบรรทัดและสาเหตุที่ Apache ปฏิเสธ ช่วยระบุจุดผิดได้เร็ว
  5. กู้คืนทันทีหากพัง — เปลี่ยนชื่อไฟล์เป็น .htaccess.off หรือคืนจาก .htaccess.bak เพื่อให้เว็บกลับมาทำงานก่อน แล้วค่อยหาสาเหตุ

หากต้องการสร้างกฎโดยไม่ต้องพิมพ์เอง ลองใช้เครื่องมือ htaccess Generator ฟรีด้านล่าง ที่ช่วยสร้างคำสั่ง Redirect, Gzip, Cache และ Security ได้ในไม่กี่คลิก

สำคัญ: หลังแก้ไข .htaccess ให้ Test เว็บไซต์ทันที เพราะข้อผิดพลาดใน .htaccess จะทำให้เว็บแสดง Error 500 ทันที หากเกิดปัญหาให้ Comment คำสั่งที่เพิ่งเพิ่มออกก่อน

คำถามที่พบบ่อย

ไฟล์ .htaccess ต้องวางไว้ที่ไหน

วางในโฟลเดอร์ที่ต้องการให้กฎมีผล โดยทั่วไปคือ public_html กฎจะมีผลกับโฟลเดอร์นั้นและโฟลเดอร์ย่อยทั้งหมด

แก้ .htaccess แล้วเว็บขึ้น Error 500 ทำอย่างไร

Error 500 มักเกิดจากไวยากรณ์ผิดหรือใช้คำสั่งที่เซิร์ฟเวอร์ไม่รองรับ ให้ย้อนการแก้ไขล่าสุดออก หรือเปลี่ยนชื่อไฟล์ชั่วคราวเพื่อยืนยันว่าสาเหตุมาจาก .htaccess ควรสำรองไฟล์เดิมไว้ก่อนแก้ทุกครั้ง

.htaccess ใช้ได้กับเว็บเซิร์ฟเวอร์ทุกตัวไหม

ใช้ได้กับ Apache เท่านั้น Nginx ไม่อ่านไฟล์ .htaccess — โฮสติ้งของ AsiaGB ใช้ Apache จึงรองรับ .htaccess เต็มรูปแบบ

กฎ .htaccess มีผลทันทีหรือต้องรีสตาร์ทเซิร์ฟเวอร์

มีผลทันทีที่บันทึกไฟล์ ไม่ต้องรีสตาร์ท Apache เพราะ Apache อ่าน .htaccess ใหม่ทุกครั้งที่มี Request เข้ามา จุดนี้เองที่ทำให้ .htaccess สะดวกกับ Shared Hosting แต่ก็ควรแก้อย่างระมัดระวัง เพราะข้อผิดพลาดจะมีผลกับผู้เข้าชมทันทีเช่นกัน

การใช้ .htaccess จำนวนมากทำให้เว็บช้าลงไหม

มีผลเล็กน้อยเพราะ Apache ต้องอ่านไฟล์ทุก Request แต่สำหรับเว็บไซต์ทั่วไปแทบไม่รู้สึกถึงความต่าง การตั้ง Cache และ Gzip ที่ถูกต้องในไฟล์เดียวกันมักช่วยให้เว็บเร็วขึ้นมากกว่าผลกระทบจากการอ่านไฟล์ จึงคุ้มค่าที่จะใช้

แก้ .htaccess ผ่าน DirectAdmin ได้เลยหรือต้องใช้ FTP

แก้ได้ทั้งสองทาง ทาง File Manager ใน DirectAdmin สะดวกที่สุดเพราะแก้และบันทึกได้ในเบราว์เซอร์ พร้อมเปิด Show Hidden Files เพื่อเห็นไฟล์ ส่วน FTP/SFTP เหมาะกับการสำรองไฟล์หรืออัปโหลดเวอร์ชันที่เตรียมไว้จากเครื่อง

ต้องการ Hosting ที่รองรับ .htaccess เต็มรูปแบบ?

AsiaGB Hosting รองรับ Apache mod_rewrite และคำสั่ง .htaccess ทั้งหมด พร้อม DirectAdmin จัดการง่าย

ดูแพ็กเกจ Hosting