
การติดตั้ง SSL Certificate ทำให้เว็บ "รองรับ" HTTPS ได้ก็จริง แต่ไม่ได้ "บังคับ" ให้ทุกคนเข้าผ่าน HTTPS โดยอัตโนมัติ ผู้เยี่ยมชมที่พิมพ์ http:// หรือกดลิงก์เก่ายังเข้าหน้าเว็บแบบไม่เข้ารหัสได้อยู่ ซึ่งกระทบทั้งความปลอดภัยและ SEO เพราะ Google มองว่าเป็นคนละ URL การ Force HTTPS คือการ Redirect ทุก HTTP Request ไปยัง HTTPS เพื่อให้เว็บมีที่อยู่เดียวที่ปลอดภัย บทความนี้รวม 3 วิธีทำ พร้อมข้อควรระวัง
วิธีที่ 1: Force HTTPS ด้วย .htaccess (ทุก Hosting)
แก้ไขหรือสร้างไฟล์ .htaccess ใน public_html เพิ่มบรรทัดเหล่านี้ที่จุดเริ่มต้นของไฟล์:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
บันทึกแล้วทดสอบโดยเปิด http://yourdomain.com ควร Redirect เป็น https:// อัตโนมัติ
รูปแบบ .htaccess เพิ่มเติม (Proxy, พอร์ต และ www)
กฎพื้นฐานด้านบนใช้ได้กับ Hosting ส่วนใหญ่ แต่บาง Server โดยเฉพาะที่อยู่ หลัง Load Balancer หรือ Reverse Proxy (เช่น Cloudflare, Nginx Proxy, AWS ELB) ตัวแปร %{HTTPS} จะเป็น off เสมอ แม้ผู้ใช้เข้าผ่าน HTTPS แล้ว เพราะ Proxy คุยกับ Apache ภายในด้วย HTTP ธรรมดา กรณีนี้ต้องตรวจ Header X-Forwarded-Proto ที่ Proxy แนบมาแทน:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
ถ้าต้องการตรวจจาก พอร์ต โดยตรง (Server บางตัวไม่ส่งตัวแปร HTTPS) ใช้เงื่อนไขพอร์ต 80 แทนได้:
RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
หากต้องการบังคับทั้ง HTTPS และ ใช้ www หรือไม่ใช้ www พร้อมกัน ให้รวมกฎไว้ในไฟล์เดียวเพื่อเลี่ยง Redirect ซ้อนสองชั้น (ซึ่งทำให้ช้าและเสีย SEO) ตัวอย่างบังคับ non-www + HTTPS:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [L,R=301]
หมายเหตุ: ใช้ R=301 (ถาวร) เมื่อมั่นใจว่าตั้งค่าถูกแล้วเท่านั้น เพราะเบราว์เซอร์และ Google จะ Cache การ Redirect ไว้ ถ้ายังทดสอบอยู่ให้ใช้ R=302 (ชั่วคราว) ไปก่อนแล้วค่อยเปลี่ยนเป็น 301 เมื่อแน่ใจ
วิธีที่ 2: Force HTTPS ใน WordPress
วิธีเร็วที่สุด (เปลี่ยน Settings URL): ใน WordPress Admin → Settings → General เปลี่ยน WordPress Address (URL) และ Site Address (URL) จาก http:// เป็น https:// ทั้งสองช่อง แล้วกด Save Changes ระบบจะ Logout แล้วให้ Login ใหม่ผ่าน HTTPS ทันที วิธีนี้ทำให้ WordPress สร้างลิงก์ภายในทั้งหมดเป็น https โดยอัตโนมัติ
ผ่าน Plugin (แนะนำสำหรับมือใหม่): ติดตั้งปลั๊กอิน Really Simple SSL → Activate → คลิกปุ่ม "Activate SSL" ปลั๊กอินจะปรับ Settings URL ให้, เปิด 301 Redirect และพยายามแก้ Mixed Content ให้อัตโนมัติในคราวเดียว เหมาะกับคนที่ไม่อยากแตะไฟล์ระบบ
บังคับ HTTPS เฉพาะหน้า Admin/Login ผ่าน wp-config.php: เพื่อความปลอดภัยของรหัสผ่านตอน Login ควรเพิ่มบรรทัดนี้ในไฟล์ wp-config.php เหนือบรรทัด /* That's all, stop editing! */ เสมอ:
define('FORCE_SSL_ADMIN', true);
ค่านี้บังคับให้หน้า wp-admin และ wp-login.php เข้าผ่าน HTTPS เท่านั้น ป้องกันการดักจับ Cookie และรหัสผ่านของผู้ดูแลระบบ ถ้าเว็บอยู่หลัง Proxy/Cloudflare แล้ว WordPress ยังเด้ง Redirect วน ให้เพิ่มโค้ดตรวจ X-Forwarded-Proto ไว้เหนือ FORCE_SSL_ADMIN ด้วย:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
&& $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
หลังเปลี่ยน Settings URL หรือย้ายโดเมน อย่าลืมใช้ปลั๊กอิน Better Search Replace แทนที่ http:// เป็น https:// ในฐานข้อมูล เพื่อให้รูปและลิงก์เก่าที่ Hardcode ไว้กลายเป็น HTTPS ทั้งหมด
บังคับ HTTPS บน Nginx (return 301) + HSTS
เว็บที่รันบน Nginx ไม่มีไฟล์ .htaccess ต้องตั้งค่าใน Server Block ของไฟล์ config แทน วิธีที่ถูกต้องและเร็วที่สุดคือสร้าง Server Block สำหรับพอร์ต 80 แยกไว้ทำหน้าที่ Redirect อย่างเดียว ไม่ต้องใช้ if (ซึ่ง Nginx ไม่แนะนำ):
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
จากนั้นใน Server Block ของพอร์ต 443 (HTTPS) เพิ่ม Header HSTS (Strict-Transport-Security) เพื่อสั่งให้เบราว์เซอร์จำว่าเว็บนี้ต้องเข้าผ่าน HTTPS เท่านั้นในครั้งถัดไป โดยไม่ต้องรอ Redirect:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
ทดสอบ config ด้วย nginx -t ก่อน Reload เสมอ และควรเริ่มจาก max-age ค่าน้อย ๆ ก่อน (เช่น 86400 = 1 วัน) แล้วค่อยเพิ่มเป็น 1 ปี เมื่อมั่นใจว่า HTTPS ทำงานเสถียร เพราะ HSTS จะ "ล็อก" เบราว์เซอร์ไว้ ถ้า SSL พังภายหลังผู้ใช้จะเข้าเว็บไม่ได้เลยจนกว่าจะหมดอายุ max-age
ปัญหาที่พบบ่อยหลัง Force HTTPS
เมื่อตั้งค่าบังคับ HTTPS แล้วมัก เจอ 2 ปัญหาหลักที่ทำให้เว็บใช้งานไม่ได้:
1. Redirect Loop (ERR_TOO_MANY_REDIRECTS)
อาการคือเบราว์เซอร์เด้งวนไม่หยุดจนขึ้น Error ส่วนใหญ่เกิดจากตั้ง SSL Mode เป็น Flexible ใน Cloudflare — Cloudflare คุยกับ Origin ด้วย HTTP แต่ .htaccess บน Origin บังคับ Redirect เป็น HTTPS อีกครั้ง วนไม่จบ แก้โดยเปลี่ยน SSL Mode ใน Cloudflare เป็น Full หรือ Full (Strict) อีกสาเหตุคือมีกฎ Redirect ซ้อนกันหลายที่ (เช่น ทั้งใน .htaccess และในปลั๊กอิน WordPress พร้อมกัน) ให้เลือกใช้ที่เดียว
2. Mixed Content (กุญแจมีเครื่องหมายเตือน)
หน้าโหลดผ่าน HTTPS แล้วแต่ยังดึงรูป/สคริปต์/CSS บางตัวผ่าน http:// ทำให้เบราว์เซอร์ขึ้นเตือน "Not Secure" บางส่วน Mixed Content แบ่งเป็นสองชนิด ชนิดแรกคือ Passive (รูปภาพ วิดีโอ) เบราว์เซอร์ยังโหลดให้แต่ขึ้นเตือนกุญแจ ส่วนชนิดที่สองคือ Active (JavaScript, CSS, iframe) อันตรายกว่าและเบราว์เซอร์สมัยใหม่จะ "บล็อกทิ้ง" เลย ทำให้หน้าเว็บเพี้ยนหรือฟังก์ชันบางอย่างใช้ไม่ได้ วิธีตรวจและแก้อยู่ในหัวข้อถัดไป
| ระบบ/สถานการณ์ | วิธีที่แนะนำ | ระวัง |
|---|---|---|
| Shared Hosting / DirectAdmin | .htaccess RewriteRule หรือปุ่ม Force SSL ใน DirectAdmin | อย่าใช้ทั้งสองพร้อมกัน |
| WordPress | Really Simple SSL + FORCE_SSL_ADMIN | แก้ Mixed Content ในฐานข้อมูลด้วย |
| VPS / Nginx | return 301 + Header HSTS | เริ่ม max-age น้อยก่อน |
| อยู่หลัง Cloudflare/Proxy | ตรวจ X-Forwarded-Proto + SSL Mode Full | Flexible = Redirect Loop |
วิธีที่ 3: Force HTTPS ใน DirectAdmin
- ล็อกอิน DirectAdmin
- ไปที่ SSL Certificates
- เลือกโดเมน
- เปิดตัวเลือก Force SSL with https redirect
- Save
ตรวจสอบ Mixed Content หลัง Force HTTPS
Mixed Content เกิดเมื่อหน้า HTTPS โหลด Resource บางอย่าง (รูป, Script) ผ่าน HTTP การแก้ให้หมดจดต้องไล่ทีละขั้น เพราะแหล่งที่มาของ http:// ฝังอยู่ได้หลายที่ ทั้งในฐานข้อมูล ในธีม ในไฟล์ CSS และในลิงก์ที่คนเขียนบทความวางมือเอง ขั้นตอนแก้ไขมีดังนี้:
- เปิด DevTools (F12) → แท็บ Console เบราว์เซอร์จะแจ้ง Warning ว่ามี Resource ใดบ้างที่โหลดผ่าน http:// พร้อมระบุ URL ให้เห็นชัด ใช้รายการนี้เป็นเช็กลิสต์ในการไล่แก้
- ใช้ปลั๊กอิน "Better Search Replace" ค้นหา
http://yourdomain.comแล้วแทนที่ด้วยhttps://yourdomain.comทั้งฐานข้อมูล WordPress วิธีนี้แก้รูปและลิงก์ภายในที่เก็บแบบ Absolute URL ได้ทีเดียวจำนวนมาก แนะนำให้สำรองฐานข้อมูลก่อนทุกครั้ง - ตรวจ Theme และ Plugin ที่ Hardcode URL เป็น http:// โดยเฉพาะใน Header, Footer และ Widget ที่ฝังโค้ดภายนอก เช่น แผนที่ Google, วิดเจ็ตโซเชียล หรือฟอนต์ที่เรียกผ่าน http://
- แก้ทรัพยากรภายนอกที่ยังเป็น http:// เช่น CDN, รูปจากเว็บอื่น, หรือ Embed ที่ไม่รองรับ HTTPS ถ้าแหล่งภายนอกนั้นไม่มี HTTPS ให้ย้ายไฟล์มาเก็บบนเซิร์ฟเวอร์ตัวเองหรือเปลี่ยนผู้ให้บริการ
- ใช้ Content-Security-Policy แบบ upgrade-insecure-requests เป็นทางลัดเสริม โดยเพิ่ม Header
Content-Security-Policy: upgrade-insecure-requestsให้เบราว์เซอร์ลองยกระดับทุก Request เป็น HTTPS อัตโนมัติ — แต่ควรใช้คู่กับการแก้ที่ต้นทาง ไม่ใช่แทนการแก้
เมื่อแก้ครบแล้วให้ลองโหลดหน้าเว็บแบบ Hard Refresh (Ctrl+Shift+R) และดูว่ากุญแจในแถบ URL กลายเป็นสีเขียว/เทาปกติไม่มีเครื่องหมายเตือน ถือว่าเว็บปลอดภัย 100% แล้ว
ก่อน Force HTTPS: ต้องมั่นใจว่า SSL Certificate ติดตั้งและใช้งานได้แล้ว ทดสอบโดยเปิด https://yourdomain.com ด้วยตัวเองก่อน หาก SSL ยังไม่พร้อม การ Force HTTPS จะทำให้เว็บเข้าไม่ได้
คำถามที่พบบ่อย
ควรเลือกวิธีไหนในสามวิธี
ถ้าใช้ WordPress ปลั๊กอิน Really Simple SSL ง่ายและปลอดภัยที่สุด ถ้ามีตัวเลือกใน DirectAdmin ก็ใช้ได้สะดวก ส่วนวิธี .htaccess เหมาะกับเว็บที่ไม่ใช่ WordPress หรือต้องการควบคุมเอง — ไม่ควรใช้หลายวิธีพร้อมกันเพราะอาจเกิด Redirect ซ้อน
Force HTTPS มีผลต่อ SEO ไหม
มีผลดี — การ Redirect แบบ 301 รวมทุก URL ไว้ที่ HTTPS เดียว ทำให้ Google ไม่สับสนระหว่าง http กับ https และค่าอันดับไม่ถูกแบ่ง
ทำไม Force HTTPS แล้วเว็บเข้าไม่ได้
มักเกิดจากการ Force HTTPS ทั้งที่ SSL ยังติดตั้งไม่สมบูรณ์ ให้ทดสอบเปิด https:// ด้วยตัวเองให้ผ่านก่อนเสมอ และถ้าใช้ Cloudflare อย่าตั้ง SSL Mode เป็น Flexible
ควรใช้ Redirect 301 หรือ 302
สำหรับการบังคับ HTTPS ถาวรให้ใช้ 301 (Moved Permanently) เสมอ เพราะ Google จะส่งต่อค่าอันดับ (Link Equity) จาก URL เดิมไปยัง HTTPS และเบราว์เซอร์จะ Cache ไว้ ช่วยให้โหลดเร็วขึ้นในครั้งถัดไป ใช้ 302 (ชั่วคราว) เฉพาะตอนทดสอบเท่านั้น เพราะ 302 จะไม่ส่งต่อค่าอันดับและไม่ถูก Cache
HSTS คืออะไร จำเป็นต้องเปิดไหม
HSTS (HTTP Strict Transport Security) คือ Header ที่สั่งให้เบราว์เซอร์ "จำ" ว่าเว็บนี้ต้องเข้าผ่าน HTTPS เท่านั้น ทำให้ครั้งต่อไปเบราว์เซอร์ข้าม HTTP ไปเลยโดยไม่ต้องรอ Redirect ช่วยเรื่องความปลอดภัยและความเร็ว ไม่บังคับว่าต้องเปิด แต่แนะนำให้เปิดเมื่อ HTTPS ทำงานเสถียรแล้ว และควรเริ่มจาก max-age ค่าน้อยก่อน
บังคับ HTTPS แล้วลิงก์เก่าใน Google จะเสียไหม
ไม่เสีย ถ้าใช้ 301 Redirect Google จะค่อย ๆ อัปเดต Index จาก http:// เป็น https:// ให้เองภายในไม่กี่สัปดาห์ ลิงก์เก่าที่คนแชร์ไว้ก็ยังเข้าได้ปกติเพราะถูก Redirect ไปหน้า HTTPS อัตโนมัติ แนะนำให้ส่ง Sitemap เวอร์ชัน HTTPS ใน Google Search Console เพื่อช่วยให้ Index เร็วขึ้น
ต้องการ SSL Certificate สำหรับเว็บไซต์?
AsiaGB มี SSL ครบทุกประเภท DV OV EV Wildcard จาก RapidSSL GeoTrust DigiCert พร้อม Let's Encrypt ฟรีในทุก Hosting
ดู SSL Certificate