HTTPS 301 Redirect for .htaccess

ยุคสมัยที่ HTTPS กำลังมาแทน HTTP กระบวนการเปลี่ยนผ่านเป็นเรื่องไม่ง่ายนัก หลังจากเปิดใช้ HTTPS กับเว็บไซต์ของท่านแล้ว กรณีที่ใช้ CMS อยู่แล้วก็ควรสั่ง 301 redirect (move permanently) เพื่อให้ทราฟฟิกจากลิงก์ที่เป็น HTTP วิ่งไปเข้า HTTPS แทน

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

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>

โค้ดบางตัวที่ค้นเจอใช้วิธีดักสตริง http หรือ https แต่โค้ดข้างต้นดักที่ตัวโพรโทคอล https จากตัวแปร %{HTTPS} เลย (ในโค้ดคือตรวจว่าถ้าไม่ใช่ HTTPS ให้เขียน URL ใหม่) จากนั้นเปลี่ยนหัว URL เป็น https:// แล้วตามด้วยโดเมนแนมซึ่งตัดมาจากตัวแปร %{SERVER_NAME} อยู่แล้ว ก่อนปิดด้วยพาธในก้อน $1 (พารามีเตอร์ตัวแรก)

โค้ดถือว่าค่อนข้างสวยเพราะไม่มีอะไร hard code ลงไปเลย (ใช้ตัวแปรทั้งหมด) การใช้งานสามารถก็อปไปใช้ได้ทั้งยวง ไม่ต้องแก้ไขอะไรเลย

กรณีที่ใช้ระบบแคช HTTPS เข้าช่วย (เช่น W3 Total Cache เปิดโหมด HTTPS) ต้องใส่โค้ดข้างต้นไว้ใน .htaccess ก่อนส่วนของ W3 Total Cache ด้วยนะครับ ไม่งั้นจะโดนมันจับ reconfig ใหม่