สร้าง Redirect ด้วย .htaccess บน DirectAdmin

ไฟล์ .htaccess คือหัวใจสำคัญของการจัดการ URL บน Apache Web Server ที่ใช้กันทั่วไปบน DirectAdmin Hosting ทุกแผน ไม่ว่าคุณต้องการ Redirect หน้าเว็บเก่าไปหน้าใหม่ บังคับให้ใช้ HTTPS หรือจัดการ URL ให้สะอาด บทความนี้รวบรวมสูตร .htaccess Redirect ทุกรูปแบบที่นักพัฒนาเว็บต้องการ พร้อมตัวอย่างโค้ดที่ copy-paste ใช้ได้เลย

วิธีแก้ไขไฟล์ .htaccess บน DirectAdmin

บน DirectAdmin คุณสามารถแก้ไขไฟล์ .htaccess ได้ 2 วิธีหลัก:

  1. File Manager: เข้า DirectAdmin → Files → File Manager → เลือกโฟลเดอร์ public_html → คลิก .htaccess → Edit
  2. FTP: เชื่อมต่อผ่าน FileZilla แล้วแก้ไขไฟล์ .htaccess ที่ root โดเมน

สำคัญ: ไฟล์ .htaccess เป็นไฟล์ที่ซ่อน (dot file) บน Linux — ถ้าใช้ FTP ต้องเปิดโหมดแสดงไฟล์ซ่อนก่อน ใน FileZilla ไปที่ Server → Force showing hidden files

ความแตกต่าง 301 vs 302 Redirect

ก่อนเริ่ม ต้องเข้าใจความต่างระหว่าง 2 ประเภทหลัก:

Redirect HTTP ไป HTTPS

รูปแบบที่จำเป็นที่สุดในยุคปัจจุบัน บังคับให้ทุก Request ใช้ HTTPS:

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

หรือวิธีที่ใช้ Header แทน (เหมาะกับบางระบบที่ใช้ Proxy/Load Balancer):

RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Redirect www ไป non-www (หรือกลับกัน)

www → non-www (แนะนำ)

RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]

non-www → www

RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Redirect URL เฉพาะหน้า

เมื่อต้องการ Redirect หน้าใดหน้าหนึ่งไปยัง URL ใหม่ ใช้ Redirect directive ที่เรียบง่ายกว่า:

# Redirect หน้าเก่าไปหน้าใหม่แบบถาวร (301) Redirect 301 /about-us.html /about.html # Redirect ชั่วคราว (302) Redirect 302 /sale /promotion.html

Redirect Folder ทั้งหมด

Redirect ทุก URL ภายใต้โฟลเดอร์เก่าไปยังโฟลเดอร์ใหม่:

RedirectMatch 301 ^/old-blog/(.*)$ /blog/$1

Redirect Trailing Slash

บังคับให้ URL มี slash ท้าย (หรือลบออก) เพื่อป้องกัน Duplicate Content:

บังคับให้มี Trailing Slash

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !/$ RewriteRule ^(.*)$ /$1/ [L,R=301]

ลบ Trailing Slash

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301]

Redirect โดเมนเก่าไปโดเมนใหม่

เมื่อต้องการย้ายเว็บทั้งหมดไปยังโดเมนใหม่:

RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.com$ [NC] RewriteRule ^(.*)$ https://new-domain.com/$1 [L,R=301]

Redirect URL Parameter (Query String)

Redirect URL ที่มี Query String เฉพาะเจาะจง:

RewriteEngine On RewriteCond %{QUERY_STRING} ^id=123$ RewriteRule ^product\.php$ /products/new-product/ [L,R=301]

การใช้ .htaccess เพื่อเพิ่มความปลอดภัยเว็บไซต์

.htaccess ไม่ได้มีประโยชน์แค่ Redirect เท่านั้น แต่ยังเป็นเครื่องมือสำคัญในการป้องกันเว็บไซต์จากการโจมตีต่างๆ ได้อีกด้วย ต่อไปนี้คือ Rule ความปลอดภัยที่ควรเพิ่มในไฟล์ .htaccess ทุกเว็บ:

# ปิด Directory Listing Options -Indexes # บล็อกการเข้าถึง .htaccess <Files .htaccess> Order allow,deny Deny from all </Files> # ป้องกัน Hotlinking รูปภาพ RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC] RewriteRule \.(jpg|jpeg|png|gif|webp|svg)$ - [F,L]

Rule เหล่านี้ช่วยลดความเสี่ยงจากการโจมตีเบื้องต้นได้มากบน Shared Hosting ที่ใช้ Apache ซึ่งรวมถึง DirectAdmin Hosting ทุกแผนของ AsiaGB ที่รองรับ .htaccess เต็มรูปแบบ

ตั้งค่า Custom Error Pages ด้วย .htaccess

นอกจาก Redirect แล้ว .htaccess ยังใช้กำหนดหน้า Error แบบ Custom ได้ เพื่อให้ผู้ใช้เห็นหน้าที่ดีไซน์สวยงามแทนที่หน้า Error ดิบๆ ของ Apache:

# กำหนดหน้า Error แบบ Custom ErrorDocument 404 /404.html ErrorDocument 403 /403.html ErrorDocument 500 /500.html # หรือ Redirect ไปยัง URL อื่น ErrorDocument 404 https://yourdomain.com/not-found

หน้า 404 Not Found เป็นหน้าที่สำคัญที่สุด เพราะลูกค้ามักพิมพ์ URL ผิดหรือลิงก์เก่าหมดอายุ การมีหน้า 404 ที่ออกแบบดีจะช่วยรักษาผู้เข้าชมไว้ในเว็บไซต์แทนที่จะให้ออกไป

เคล็ดลับ SEO: หน้า Custom 404 ควรมี HTTP Status Code 404 จริงๆ (ไม่ใช่ 200 OK) และควรมีลิงก์กลับไปหน้าแรก หรือ Sitemap เพื่อให้ผู้เข้าชมหาเนื้อหาที่ต้องการได้ ควรใส่แถบค้นหาในหน้า 404 ด้วย เพราะผู้ใช้ที่หาหน้าไม่เจอมักต้องการค้นหาเนื้อหาที่ใกล้เคียง ถ้าหน้า 404 ตอบสนองได้ดีจะลด Bounce Rate ลงได้อย่างมีนัยสำคัญ

การตั้งค่า MIME Types และ Charset ผ่าน .htaccess

การกำหนด MIME Type ที่ถูกต้องผ่าน .htaccess มีผลต่อประสิทธิภาพและความปลอดภัยของเว็บไซต์ โดยเฉพาะสำหรับไฟล์ประเภทใหม่ๆ เช่น WebP, WOFF2 หรือ SVG ที่บางเซิร์ฟเวอร์อาจยังไม่รู้จัก:

# กำหนด MIME Types สำหรับไฟล์สมัยใหม่ AddType image/webp .webp AddType font/woff2 .woff2 AddType image/svg+xml .svg # บังคับ UTF-8 Charset สำหรับ HTML และ CSS AddDefaultCharset UTF-8 AddCharset UTF-8 .html .css .js .xml .txt

การตั้งค่า Charset ที่ถูกต้องช่วยป้องกันปัญหาตัวอักษรภาษาไทยแสดงผลเป็นสัญลักษณ์แปลกๆ (Encoding Error) ซึ่งพบบ่อยในเว็บที่พัฒนาบนระบบปฏิบัติการ Windows แล้ว Upload ขึ้น Linux Server

Redirect ตาม User Agent และ IP (Bot vs Human)

บางครั้งอาจต้องการ Redirect แตกต่างกันระหว่าง Search Engine Bot กับผู้ใช้จริง หรือแยกการเข้าถึงตาม IP เช่น ระหว่าง Maintenance ที่ต้องการให้เฉพาะ Admin เข้าได้:

# Redirect ผู้ใช้ทั่วไปไป Maintenance Page แต่ยกเว้น IP คุณเอง RewriteEngine On RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000$ RewriteCond %{REQUEST_URI} !^/maintenance\.html$ RewriteRule ^ /maintenance.html [L,R=302]

วิธีนี้มีประโยชน์มากตอน Deploy ระบบใหม่หรืออัปเดตเว็บ โดยที่ Admin ยังสามารถเข้าถึงเว็บได้ตาม IP ที่กำหนด ในขณะที่ผู้เข้าชมทั่วไปจะเห็นหน้า Maintenance แทน นอกจากนี้ยังสามารถใช้ %{HTTP_USER_AGENT} ในการตรวจจับ Bot เพื่อ Block หรือ Redirect ได้ตามต้องการ เช่น ปิดกั้น Scraper บางตัวที่ดึงเนื้อหาโดยไม่ได้รับอนุญาต

เปรียบเทียบ Redirect Directive กับ RewriteRule

มีสองวิธีหลักในการทำ Redirect ผ่าน .htaccess ซึ่งมีความแตกต่างที่ควรรู้:

คุณสมบัติ Redirect Directive RewriteRule
ความซับซ้อน ง่าย เหมาะกับ URL เดียว ยืดหยุ่นสูง รองรับ Pattern
รองรับ Regex ไม่รองรับ รองรับเต็มรูปแบบ
เงื่อนไขเพิ่มเติม ไม่มี ใช้ RewriteCond ได้
ตัวอย่าง Redirect 301 /old /new RewriteRule ^old(.*)$ /new$1 [L,R=301]
เหมาะกับ Redirect หน้าเดี่ยวๆ Redirect ทั้งโฟลเดอร์ HTTPS www

กฎสำคัญ: ป้องกัน Redirect Loop

ข้อผิดพลาดที่พบบ่อยที่สุดคือ Redirect Loop ทำให้เว็บโหลดไม่ได้ เบราว์เซอร์แสดง "ERR_TOO_MANY_REDIRECTS" ปัญหานี้เกิดขึ้นเมื่อ Rule สองตัวหรือมากกว่าขัดแย้งกัน ทำให้ Apache วนซ้ำอยู่ในกลุ่ม Rule โดยไม่สิ้นสุด วิธีป้องกัน:

ตรวจสอบ Redirect ด้วย curl และเครื่องมืออื่น

หลังแก้ไข .htaccess ทดสอบ Redirect ได้ทันทีด้วยคำสั่ง curl หรือใช้เครื่องมือออนไลน์ที่ช่วยตรวจสอบ Redirect Chain ทั้งหมดได้ในขั้นตอนเดียว:

curl -I http://yourdomain.com # ดู Location: header และ HTTP status code # ตรวจ Redirect Chain ทั้งหมด (ทุก Hop) curl -IL http://yourdomain.com # แสดง Header ของทุก Response ในห่วงโซ่ Redirect

นอกจาก curl ยังมีเครื่องมือออนไลน์ที่สะดวก เช่น httpstatus.io และ redirect-checker.org ซึ่งแสดง Redirect Chain ทั้งหมดพร้อม Status Code แต่ละขั้นตอน ช่วยให้มองเห็นได้ชัดว่ามีกี่ Hop และแต่ละ Hop ใช้ Status Code อะไร ควรให้ Redirect Chain สั้นที่สุด ไม่เกิน 2-3 Hop เพราะแต่ละ Hop เพิ่มเวลา Latency ให้ผู้เยี่ยมชม

ตัวอย่าง .htaccess ครบชุดสำหรับเว็บทั่วไป

รวม Rule ที่แนะนำสำหรับเว็บไซต์ทั่วไปบน DirectAdmin Hosting:

Options -Indexes RewriteEngine On # 1. Redirect HTTP → HTTPS RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 2. Redirect www → non-www RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]

เคล็ดลับ: AsiaGB Hosting รองรับ mod_rewrite และ AllowOverride All ครบทุกแผน ทำให้ .htaccess ทำงานได้เต็มประสิทธิภาพ ราคาเริ่มต้นเพียง 500 บาท/ปี บนพื้นที่ SSD พร้อม DirectAdmin และ PHP 7.4/8.2/8.3

Hosting SSD พร้อม DirectAdmin

รองรับ mod_rewrite ทุกแผน ตั้งค่า .htaccess ได้ตามต้องการ เริ่มต้น 500 บาท/ปี Uptime 99%

ดูแพ็กเกจ Hosting