Memaksa SSL dan www di .htaccess

12

Saya mencari cara untuk memaksa SSL dan www.

Saya dapat memaksa keduanya secara terpisah tetapi bersama-sama saya terus mengalami masalah pengalihan. Kode berikut berfungsi saat menangani URL dalam format ini: http://example.comdan diarahkan dengan benar https://www.example.comtetapi ketika URL yang masuk https://example.comitu tidak akan diteruskan ke https://www.example.com- Ada saran?

Sunting: itu juga harus dikirim http://www.example.comke https://www.example.com.

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Stephen
sumber

Jawaban:

7

Baris pertama digunakan untuk mencegah URL internal ditulis ulang. Itu mungkin menyebabkan halaman yang berbeda ditampilkan, jadi saya telah menghapusnya.

Jika host example.comdiminta atau tidak diminta melalui HTTPS, host akan ditulis ulang menjadi https://example.com/. Yaitu, penulisan ulang http://example.com, http://www.example.comdan https://example.comuntuk https://www.example.comdalam satu tindakan.

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Dokumentasi pada mod_rewrite untuk Apache 2.2 .

Jika Anda suka subdomain forum.example.com, aturan pertama harus seperti apa adanya. Jika tidak, Anda dapat melakukan pertandingan negatif www.example.comjuga.

Lekensteyn
sumber
0

Tidak harus baris ketiga:

RewriteCond %{HTTP_HOST} ^example\.com$
Piers Karsenbarg
sumber
0

Coba ini:

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Arvin
sumber
0

Anda juga bisa menggunakan baris berikut yang saya gunakan dan bekerja dengan sempurna.

(Hapus RewriteCond atas jika Anda tidak menggunakan CloudFlare)

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
itteam
sumber
0

Baru saja menerapkan ini untuk situs saya. Bekerja seperti pesona! Ditambahkan ke bagian atas file .htaccess saya. Arahkan ulang semua contoh orang yang mengetik www atau tidak www, http atau https.

# BEGIN HTTPS Redirect
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
# END HTTPS Redirect
pengguna67283
sumber
0

Saya menguji semua saran yang diberikan di atas, tetapi tidak ada yang mencakup keseluruhan skenario.

Saya ingin semua pengunjung berkunjung https://www.example1.com/

Beberapa kode yang disediakan oleh pengguna lain berfungsi untuk mengambil URL yang tidak aman dan / atau non-www https://www.example1.com/, namun, tidak satupun dari mereka yang tercakup https://example1.comuntuk dikonversi menjadi "www" juga.

Saya meng-host situs web saya dengan GoDaddy, kalau-kalau ada bedanya.

Ini adalah kode yang berfungsi untuk saya:

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

Baris terakhir bisa juga:

RewriteRule ^(.*)$ https://www.example1.com/$1 [R,L]

Tapi saya menggunakan kode "301" untuk mengirim pesan " pindah secara permanen " dengan harapan Google dan mungkin mesin pencari lainnya akan memperbarui tautan lama.

onpre
sumber