Force HTTPS Redirect บน Hosting ทุกวิธี

บังคับให้เว็บใช้ HTTPS ตลอดเวลาด้วยวิธีที่เหมาะกับการตั้งค่าของคุณ ไม่ว่าจะใช้ cPanel, WordPress หรือ Cloudflare

Force HTTPS Redirect บน Hosting

ทำไมต้อง Force HTTPS?

แม้จะติดตั้ง SSL Certificate แล้ว เว็บของคุณยังคงเข้าถึงได้ผ่าน HTTP ได้อยู่ ถ้าไม่บังคับ Redirect ผู้ใช้ที่พิมพ์แค่ yoursite.com (ไม่มี https://) จะได้รับหน้าเว็บแบบไม่เข้ารหัส ปัญหาที่ตามมา ได้แก่ Google ไม่ให้คะแนน SEO เต็มที่ Browser แสดงคำเตือน "Not Secure" และ Mixed Content Warning เมื่อหน้า HTTPS โหลด Resource แบบ HTTP

วิธีที่ 1: Force HTTPS ผ่าน cPanel

วิธีนี้ง่ายที่สุดและแนะนำสำหรับผู้เริ่มต้น:

  1. ล็อกอิน cPanel แล้วไปที่ Domains
  2. คลิก Domains (หรือ Manage Domains ในบาง cPanel)
  3. ค้นหาโดเมนของคุณแล้วเปิด Force HTTPS Redirect Toggle
  4. บันทึก cPanel จะเพิ่ม Rule ใน .htaccess ให้อัตโนมัติ

หาก cPanel ของคุณไม่มีตัวเลือกนี้ หรือต้องการควบคุมมากกว่า ให้ใช้วิธีถัดไป

วิธีที่ 2: Force HTTPS ผ่าน .htaccess

เพิ่มโค้ดต่อไปนี้ที่บน .htaccess ก่อน WordPress Rule อื่นๆ:

RewriteEngine On

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

# Force www (ถ้าต้องการ)
# RewriteCond %{HTTP_HOST} !^www\.
# RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

ถ้าอยู่หลัง Cloudflare หรือ Load Balancer ให้ใช้แบบนี้แทน เพื่อเช็ค X-Forwarded-Proto Header:

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

วิธีที่ 3: Force HTTPS ผ่าน WordPress

สำหรับ WordPress มีสองจุดที่ต้องตั้งค่า:

ขั้นตอนที่ 1: แก้ไข wp-config.php เพิ่มก่อนบรรทัด "That's all, stop editing":

define('FORCE_SSL_ADMIN', true);

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}

ขั้นตอนที่ 2: ใน WordPress Admin ไปที่ Settings → General เปลี่ยน WordPress Address (URL) และ Site Address (URL) เป็น https://

Tip: หลังเปลี่ยน URL ใน WordPress Settings จะถูก Logout อัตโนมัติ ให้ Login ใหม่ผ่าน https:// และตรวจสอบว่าทุกหน้าโหลดผ่าน HTTPS แล้ว

วิธีที่ 4: Force HTTPS ผ่าน Cloudflare

ถ้าใช้ Cloudflare เป็น DNS Proxy สามารถบังคับ HTTPS ได้โดยตรงบน Cloudflare Dashboard:

  1. ล็อกอิน Cloudflare แล้วเลือกโดเมน
  2. ไปที่ SSL/TLS → Edge Certificates
  3. เปิด Always Use HTTPS
  4. เปิด Automatic HTTPS Rewrites เพื่อแก้ Mixed Content อัตโนมัติ
  5. ตั้ง Minimum TLS Version เป็น TLS 1.2

ตรวจสอบว่า Force HTTPS ทำงานถูกต้อง

# ทดสอบ Redirect จาก HTTP ต้องได้ 301 → HTTPS
curl -I http://yoursite.com/

# ตรวจสอบ URL ปลายทาง
curl -IL http://yoursite.com/ | grep -E "HTTP/|Location:"

# ตรวจสอบ HSTS Header
curl -I https://yoursite.com/ | grep -i "strict-transport"

# ตรวจ Mixed Content ด้วย Chrome DevTools
# F12 → Console มองหา Warning: "Mixed Content"
Tip: ใช้ whynopadlock.com เพื่อตรวจสอบ Mixed Content ทุก Resource บนหน้าเว็บโดยอัตโนมัติ ฟรีไม่ต้องติดตั้งอะไร

แก้ปัญหาที่พบบ่อย

Error: "ERR_TOO_MANY_REDIRECTS" หรือ Redirect Loop

เกิดเมื่อ Server Redirect ไป HTTPS แล้ว ก็ Redirect กลับมา HTTP วนไม่จบ สาเหตุที่พบบ่อยคือ ใช้ Cloudflare SSL Mode เป็น "Flexible" พร้อมกับ .htaccess Force HTTPS แก้ไขโดยเปลี่ยน Cloudflare SSL Mode เป็น "Full" หรือ "Full (Strict)" หรือลบ .htaccess Rule ออกแล้วใช้แค่ Cloudflare

Error: Mixed Content Warning (แม้ Force HTTPS แล้ว)

มี Resource บนหน้าเว็บที่ยังโหลดผ่าน http:// เช่น รูปภาพ, Script, CSS ที่ Hard-code URL ไว้ใน Content สำหรับ WordPress ใช้ Plugin Better Search Replace เพื่อเปลี่ยน http://yoursite.com เป็น https://yoursite.com ในฐานข้อมูล

Error: HSTS Warning หรือ Browser บล็อกเว็บ

HSTS (HTTP Strict Transport Security) ทำให้ Browser จำว่าเว็บนี้ต้องใช้ HTTPS เท่านั้น ถ้าเพิ่ง Disable SSL แต่ HSTS ยังมีผล Browser จะยังบล็อกอยู่ต้องรอให้ Max-Age หมด หรือลบ HSTS ด้วย Chrome: พิมพ์ chrome://net-internals/#hsts แล้ว Delete

Error: WordPress Login ยังเป็น HTTP หลังตั้งค่า HTTPS

ตรวจสอบว่า siteurl และ home ใน Database ถูกเปลี่ยนเป็น https:// แล้ว (ดูใน wp_options) และ FORCE_SSL_ADMIN ถูกตั้งค่าใน wp-config.php แล้ว บาง Plugin Cache อาจ Cache หน้า HTTP ไว้ ให้ Clear Cache ด้วย


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

ควรใช้ 301 หรือ 302 Redirect เมื่อ Force HTTPS?

ควรใช้ 301 (Permanent Redirect) เสมอ เพราะบอก Browser และ Search Engine ว่า URL ย้ายถาวร ทำให้ SEO Link Juice ถ่ายไปยัง HTTPS Version ด้วย 302 คือ Temporary Redirect ซึ่งไม่ถ่าย SEO Value

Force HTTPS แล้วต้องทำอะไรเพิ่มเติมสำหรับ SEO?

อัปเดต Canonical URL ให้เป็น https:// ทุกหน้า, อัปเดต Sitemap.xml, แจ้ง Google Search Console ว่า URL เปลี่ยนเป็น HTTPS แล้ว ตรวจสอบว่า Internal Link ทั้งหมดใช้ https:// และอัปเดต Google Analytics Property ด้วย

HSTS คืออะไร และควรเปิดไหม?

HSTS (HTTP Strict Transport Security) เป็น HTTP Header ที่บอก Browser ว่าต้องใช้ HTTPS เท่านั้นไปอีก max-age วินาที ป้องกัน SSL Strip Attack ได้ดีมาก แนะนำเปิด แต่ต้องมั่นใจว่า SSL ทำงานถาวรก่อนเพราะ Reverse ยาก