bagaimana cara mengalihkan semua permintaan ke https dan non-www dalam satu lompatan?

Dec 18 2019

Saya ingin mengarahkan semua permintaan ke https dan non-www dalam satu lompatan untuk halaman utama / beranda dan sub halaman lainnya. Saya menggunakan htaccess berikut. sumber

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^mytesting\.com$ [OR] RewriteCond %{HTTP_HOST} ^www\.mytesting\.com$
RewriteRule .* https://www.mytesting.com%{REQUEST_URI} [R=301,L]

Tapi saya mendapat pengalihan berikut

Saya ingin seperti ini:

http://mytesting.com          > https://mytesting.com
http://www.mytesting.com      > https://mytesting.com
http://mytesting.com/faq      > https://mytesting.com/faq
https://mytesting.com         > https://mytesting.com
http://www.mytesting.com      > https://mytesting.com
http://www.mytesting.com/faq  > https://mytesting.com/faq
https://mytesting.com/faq     > https://mytesting.com/faq

Jawaban

2 anubhava Dec 18 2019 at 21:41

Anda dapat menggunakan aturan ini untuk kedua pengalihan dalam satu aturan:

RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]

Berikut penjelasan dari aturan ini:

  • RewriteCond %{HTTP_HOST} ^www\. [NC,OR]: jika HOST_NAMEdimulai denganwww.
  • [NC,OR]: Abaikan kecocokan kasus dan ORkondisi selanjutnya
  • RewriteCond %{HTTPS} !on: HTTPStidak diaktifkan
  • RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]: Ketentuan ini akan selalu cocok karena di sini www.adalah pencocokan opsional. Ini digunakan untuk menangkap substring HTTP_HOSTtanpa memulai www.dengan menggunakan (.+)pola dalam grup penangkapan # 1 (untuk direferensikan kembali %1nanti). Perhatikan bahwa (?:..)ini adalah grup non-penangkap.
  • RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]: ^akan selalu cocok. Aturan ini akan dialihkan ke https://%1%{REQUEST_URI}dengan R=301kode. Dari mana %1referensi balik kelompok penangkapan # 1 RewriteCond, seperti yang disebutkan di atas.