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.