Apa saja yang harus kita ubah dan lakukan setelah migrasi dari HTTP ke HTTPS?
1. URL Scheme pada Tautan
Kita harus mengubah url scheme http:// ke https:// pada url absolut. Pada url relatif, kita tidak perlu melakukan perubahan.
2. Redirect http ke https
Ketika pengguna menuju ke tautan versi http://host/path, kita alihkan ke https://host/path dengan kode HTTP 301.
Jika menggunakan Apache, berikut adalah cara resmi dari https://wiki.apache.org/httpd/RewriteHTTPToHTTPS:
RewriteEngine On
# This will enable the Rewrite capabilities
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e. http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context
Untuk cara yang paling sering ditemukan di tutorial-tutorial adalah:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Cukup sederhana, tetapi menurut saya ada yang salah. Kita tidak perlu melakukan capture (.*) karena kita sudah menggunakan variable %{REQUEST_URI}. Kecuali kita menggunakan /$1.
Maka rule yang benar adalah:
RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Untuk
RewriteCond %{HTTPS} !=on atau
RewriteCond %{HTTPS} off bisa kita ganti dengan:
RewriteCond %{SERVER_PORT} 80
Tetapi menurut saya lebih tepat tidak menggunakan port. Kecuali yakin hanya akan menggunakan port 80.
Jadi cara yang benar selain cara resmi adalah:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]