htaccess redirect non-www ke www dengan SSL / HTTPS


10

Saya ingin aturan penulisan ulang yang mengalihkan semuanya ke https:// DAN www .

Misalnya http://example.comharus pergi kehttps://www.example.com

Inilah yang saya miliki:

RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^(.*)$ "https\:\/\/www\.example\.com\/$1" [R=301,L]

Jawaban:


11

Saya menemukan solusinya.

Tanpa HSTS (pengalihan tunggal):

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

Dengan HSTS (pengalihan ganda):

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

1
Perhatikan bahwa ini akan menghasilkan pengalihan ganda ketika meminta http://example.com(mis. HTTP dan non-www), karena ini akan mengarahkan ulang ke HTTPS pada host yang sama (mis. Tanpa www) dan kemudian mengarahkan kembali wwwsebagai pengalihan kedua. Anda dapat memperbaikinya dengan hanya membalik kedua aturan ini.
— MrWhite

@ MrWhite @akan Anda benar-benar ingin pengalihan ganda pada pengalihan yang tepat https://, terutama jika Anda menggunakan HSTS. Dengan cara ini, preferensi HSTS Anda dapat disimpan oleh browser untuk domain Anda dan permintaan berikutnya akan selalu default kehttps://
— xsrf

@xsrf Masih "layak" (dan lebih efisien) untuk memiliki satu pengalihan www dan HTTPS. Itu hanya perlu disimpan terpisah ketika Anda menerapkan HSTS.
— MrWhite

Baik poin bagus dari xsrf dan MrWhite. Saya sudah memperbarui jawabannya.
— Will

@ xsrf Saya memeriksa pengalihan ganda dengan htaccess.madewithlove.be dan tampaknya pengalihan hanya http: //> https: // bukan www .
— Will

6

Kondisi Anda secara implisit DAN akan dan kondisi kedua Anda akan selalu benar (kecuali jika Anda memiliki domain lain), sehingga aturan Anda saat ini hanya akan mengarahkan lalu lintas non-SSL.

Anda perlu ORkondisi dan meniadakan kondisi www(kedua):

RewriteEngine On
RewriteCond %{SERVER_PORT} !=443 [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

Jika SERVER_PORTbukan 443 (mis. Bukan HTTPS) atau host tidak memulai dengan www.(mis. Anda mengakses domain kosong) maka arahkan ke URL kanonik.

Namun, apakah ini akan dialihkan https://example.comke https://www.example.comakan tergantung pada sertifikat keamanan Anda. (Situs Anda harus dapat diakses oleh www dan non-www melalui SSL agar pemicu .htaccess diarahkan.)


1

Ini akan digunakan untuk www atau non-www. Jika Anda mencoba membuka tautan dengan www maka url redirect ke https dengan www

Contoh: http://domain.comredirect kehttps://domain.com

atau Jika Anda mencoba membuka tautan dengan non-www maka url redirect ke https dengan non-www

Contoh: http://www.domain.comredirect kehttps://www.domain.com

RewriteEngine on

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Ini tidak menangani pengalihan non-www ke www seperti yang dinyatakan dalam pertanyaan.
— MrWhite

Anda dapat menambahkan baris ini di htaccess RewriteCond% {HTTP_HOST}! ^ Www \. RewriteRule ^ (. *) $ % {HTTP_HOST} / $ 1 [R = 301, L]
— Ajay Patidar

Ganti RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] olehRewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [R=301,L]
— Ajay Patidar

Anda dapat mengedit jawaban Anda.
— MrWhite
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.