knmasters.official@gmail.com
Monday - Sunday : 06.00 A.M. - 11.59 P.M.
KNmasters Digital Marketing การตลาดออนไลน์
เพิ่มเพื่อน

.htaccess เปลี่ยนเส้นทางไปที่ https และ www

KNmasters Digital Marketing การตลาดออนไลน์
Share This Post
สารบัญ

หากไซต์ของคุณให้บริการหน้าเว็บไซต์ที่ปลอดภัยผ่านโปรโตคอล HTTPS (เช่น ผ่าน SSL/TLS) คุณอาจต้องใช้เทคนิคในการเปลี่ยนเส้นทางคำขอ HTTP ทั้งหมดไปยัง HTTPS จากนั้น เพื่อดำเนินการต่อไปด้วยความพยายามในการทำให้เป็นมาตรฐาน คุณอาจต้องการเปลี่ยนเส้นทางคำขอ www ทั้งหมดไปยังที่ไม่ใช่ www (หรือกลับกัน) เทคนิคทั้งสองนี้จำเป็นสำหรับการแสดงหน้าเว็บไซต์เวอร์ชันมาตรฐานของคุณ ดังนั้นทำไมไม่รวมเข้าด้วยกัน เป็น .htaccess ส่วนเดียวที่เรียบง่าย อ่านต่อเพื่อเรียนรู้วิธีการ

เปลี่ยนเส้นทางไปที่ https และไม่ใช่ www

หากต้องการเปลี่ยนเส้นทางคำขอทั้งหมดไปที่ https และไม่ใช่ www ให้ใช้รหัสต่อไปนี้แทนรหัสก่อนหน้า :

# Canonical HTTPS / non-WWW
<IfModule mod_rewrite.c>
	RewriteCond %{HTTPS} off [OR]
	RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
	RewriteRule (.*) https://example.com/$1 [L,R=301]
</IfModule>

วางโค้ดนี้ในรูท .htaccess ของไซต์ของคุณเช่นเดิม นี่คือสิ่งที่กำลังทำอยู่ :

  1. ตรวจสอบว่า mod_rewrite มีให้ หรือไม่?
  2. ตรวจสอบว่า HTTPS ปิดอยู่หรือมีคำขอรวมอยู่ด้วย www
  3. หากตรงตามเงื่อนไขข้อใดข้อหนึ่ง คำขอจะผ่านเกณฑ์และเปลี่ยนเส้นทางไปยัง https/non-www ที่อยู่

เมื่อวางในรูท .htaccess เทคนิคนี้จะครอบคลุม คำขอ ทั้งหมดโดยจัดเตรียม https/non-www ให้เป็นรูปแบบบัญญัติที่สมบูรณ์สำหรับไซต์ของคุณ อย่าลืมแทนที่ทั้งสองอินสแตนซ์ example.com ด้วยชื่อโดเมนของคุณเอง

หมายเหตุ:หากไซต์ของคุณมีปัญหาหน้าซ้ำกันเนื่องจากถูก index.php ผนวกเข้ากับ URL ที่ร้องขอ โปรดดูโพสต์นี้ที่ WP-Mix.com ซึ่งจะอธิบายวิธีลบ www และ index.php ออกจาก URL


เปลี่ยนเส้นทางไปที่ https และ www

เทคนิค .htaccess ต่อไปนี้จะเปลี่ยนเส้นทางคำขอที่ผ่านการรับรองไปยัง หน้าเว็บไซต์เวอร์ชัน https และ www ของคุณ เพิ่มไปยังไฟล์ .htaccess รูทของไซต์ของคุณ :

# Canonical https/www
<IfModule mod_rewrite.c>
	RewriteCond %{HTTPS} off
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
	
	RewriteCond %{HTTP_HOST} !^www\. [NC]
	RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

รหัสนี้ทำสิ่งต่อไปนี้ :

  1. สองบรรทัดแรกเปลี่ยนเส้นทางอย่างมีเงื่อนไขไปที่ https หาก HTTPS ตั้งค่าตัวแปรเป็นปิด คำขอจะเปลี่ยนเส้นทางไปที่ https (ดูหมายเหตุด้านล่างหากใช้พร็อกซี)
  2. สองบรรทัดที่สองเปลี่ยนเส้นทางไปที่ www หากคำขอ / โฮสต์ไม่ได้ขึ้นต้นด้วย www. คำขอจะถูกเปลี่ยนเส้นทางไปที่ www

เมื่อวางในรูท .htaccess เทคนิคนี้จะครอบคลุม คำขอ ทั้งหมดโดยจัดเตรียม https/www ให้เป็นรูปแบบบัญญัติที่สมบูรณ์สำหรับไซต์ของคุณ ไม่จำเป็นต้องมีการแก้ไขด้วยโค้ดนี้ มันเป็น Plug-and-play ทั้งหมด


หมายเหตุ : หากใช้พร็อกซี

ตามที่อธิบายไว้ที่นี่

“เมื่ออยู่เบื้องหลังการใช้พร็อกซีบางรูปแบบ โดยไคลเอนต์เชื่อมต่อผ่าน HTTPS กับพร็อกซี ตัวโหลดบาลานเซอร์ แอปพลิเคชัน Passenger เป็นต้น ตัวแปร %{HTTPS} อาจไม่เคยอยู่ on และทำให้เกิดการวนซ้ำ นี่เป็นเพราะแอปพลิเคชันของคุณรับทราฟฟิก HTTP ธรรมดา แม้ว่าไคลเอนต์และพร็อกซี/โหลดบาลานเซอร์จะใช้ HTTPS ก็ตาม ในกรณีเหล่านี้ ให้ตรวจสอบส่วน X-Forwarded-Proto หัวแทน %{HTTPS} ตัวแปร”

ดังนั้นหากคุณใช้บริการพร็อกซีบางประเภทหรือคล้ายกัน ให้เพิ่มบรรทัดต่อไปนี้ในโค้ดด้านบน :

RewriteCond %{HTTP:X-Forwarded-Proto} !https

ดังนั้นผลลัพธ์สุดท้ายจะเป็นดังนี้หากใช้พร็อกซีเซิร์ฟเวอร์ :

# Canonical https/www (when using proxy)
<IfModule mod_rewrite.c>
	RewriteCond %{HTTP:X-Forwarded-Proto} !https
	RewriteCond %{HTTPS} off
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
	
	RewriteCond %{HTTP_HOST} !^www\. [NC]
	RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>