Saya mencoba mengalihkan semua permintaan HTTP tidak aman di situs saya (mis. http://www.example.com) Ke HTTPS ( https://www.example.com). Saya menggunakan PHP btw. Bisakah saya melakukan ini di .htaccess?
Anda dapat (dan harus) melakukannya melalui Anda httpd, bukan dengan PHP.
membanting tulang
2
@ jnpcl, sementara saya setuju solusi httpd lebih baik daripada solusi berbasis PHP, saya tidak berpikir pengalihan sistematis adalah praktik yang baik secara umum. Jika Anda ingin mengarahkan pengguna Anda ke HTTPS setiap saat, kirim mereka ke sana dari "titik masuk" (tautan pertama ke situs Anda), jangan lakukan setengah jalan, yang mungkin membocorkan beberapa data yang Anda pikir dilindungi (jika Anda tidak melihat pengalihan seketika itu).
Bruno
@ Bruno: Saya lebih memikirkan alur permintaan http yang digandakan, potensi string kueri yang hilang, dan kemungkinan pengguna mengetik secara manualhttp://
drudge
@ jnpcl itu memang bagus. Saya hanya menyarankan bahwa, sementara orang cenderung meminta pengalihan semacam ini untuk meningkatkan keamanan situs mereka, seringkali, itu sebenarnya tidak memperbaikinya (karena itu tidak mencegah permintaan yang sama untuk melalui HTTP biasa terlebih dahulu) .
Bruno
8
@outis: tautan pertama yang Anda poskan adalah pertanyaan ini .
@ Kucing, seperti yang saya katakan di jawaban / komentar saya, jika Anda mencoba untuk "mengalihkan semua HTTP tidak aman [...] ke HTTPS", pendekatan ini tidak akan membuat permintaan itu aman, itu hanya akan membuat browser membuatnya dua kali, sekali tidak aman dan sekali aman.
Bruno
13
Apa yang seharusnya Anda lakukan adalah menggunakan HSTS bersamaan dengan ini.
Reese Moore
3
Ini mungkin bug di versi apache saya (2.4.6 sebagaimana dikemas dalam Centos 7), tetapi ini memiliki masalah bagi saya di URL tertentu. Misalnya, http://server/foo?email=someone%40example.compengalihan ke https://server/foo?email=someone%2540example.comyaitu tanda "@" mendapat URL yang dikutip dua kali . Menggunakan metode dalam jawaban ssc @ tidak memiliki masalah ini.
psmears
2
Jawaban yang salah. Ini hanya akan mengarahkan ulang url basis, bukan url dalam subfolder. RewriteRule (. *) Https: //% {HTTP_HOST}% {REQUEST_URI} [R = 301, L] adalah jawaban yang benar
FredTheWebGuy
7
Mereka tidak selalu merekomendasikan menentangnya:In the case of the http-to-https redirection, the use of RewriteRule would be appropriate if you don't have access to the main server configuration file, and are obliged to perform this task in a .htaccess file instead.
Adam
338
The docs Apache merekomendasikan menggunakan penulisan ulang:
Untuk mengarahkan ulang httpURL https, lakukan hal berikut:
Ini harus menjadi jawaban saat ini. Tapi apa sebenarnya yang terjadi di "konfigurasi SSL"? Contoh lengkap akan sangat membantu.
Ben
6
@ Ben: itu pertanyaan berbeda yang didokumentasikan secara online secara luas; kebetulan, saya baru saja menambahkan contoh yang hampir lengkap kemarin: serverfault.com/q/597012/26210 yang mungkin memberi Anda gambaran tentang apa yang terjadi dalam konfigurasi SSL
ssc
46
Ini petunjuk yang bagus. Tetapi di Apache doc juga menyebutkan: "Dalam hal pengalihan http-to-https, penggunaan RewriteRule akan sesuai jika Anda tidak memiliki akses ke file konfigurasi server utama, dan berkewajiban untuk melakukan tugas ini di sebagai gantinya, file .htaccess. " Yang merupakan kasus bagi saya ...
peter_the_oak
4
@ user1844933 Jika Anda menggunakan permanentkata kunci, efeknya sama (browser menerima 301 redirect). Contoh:Redirect permanent "/" "https://example.com"
BeetleJuice
2
@Whitecat Dalam Centos 6 file ini terletak di
/etc/httpd/conf/httpd.conf
141
Saya akan merekomendasikan dengan 301 redirect:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
terima kasih, ini bekerja untuk saya, jawaban yang diterima tidak .. mungkin karena kurangnya[L]
billynoah
1
Ya. Ini adalah jawaban yang benar karena ini juga
merutekan
Apakah ini di tingkat atas file htaccess?
CodyBugstein
1
@CodyBugstein Di situlah saya selalu menempatkannya, dan selalu berhasil.
Daan van den Bergh
3
Semua jawaban tidak memiliki satu hal - kode untuk pengalihan harus ditempatkan tepat di awal file .htaccess Anda, SEBELUM hal lain, jika Anda ingin semua halaman dialihkan ke https.
Vadim Anisimov
35
Seperti yang saya katakan dalam pertanyaan ini , saya sarankan Anda menghindari mengarahkan semua permintaan HTTP ke HTTPS mereka secara membabi buta, karena dapat menyebabkan Anda kesan palsu tentang keamanan. Sebaliknya, Anda mungkin harus mengarahkan "root" situs HTTP Anda ke root situs HTTPS Anda dan tautan dari sana, hanya ke HTTPS.
Masalahnya adalah bahwa jika beberapa tautan atau formulir di situs HTTPS membuat klien mengirim permintaan ke situs HTTP, isinya akan terlihat, sebelum pengalihan.
Misalnya, jika salah satu halaman Anda yang ditayangkan melalui HTTPS memiliki formulir yang mengatakan <form action="http://example.com/doSomething">dan mengirim beberapa data yang tidak boleh dikirim dengan jelas, browser pertama-tama akan mengirim permintaan penuh (termasuk entitas, jika itu POST) ke situs HTTP pertama. Pengalihan akan segera dikirim ke browser dan, karena sejumlah besar pengguna menonaktifkan atau mengabaikan peringatan, kemungkinan akan diabaikan.
Tentu saja, kesalahan menyediakan tautan yang seharusnya ke situs HTTPS tetapi akhirnya menjadi untuk situs HTTP dapat menyebabkan masalah segera setelah Anda mendapatkan sesuatu yang mendengarkan pada port HTTP pada alamat IP yang sama dengan situs HTTPS Anda. Namun, saya pikir menjaga kedua situs sebagai "cermin" hanya meningkatkan kemungkinan membuat kesalahan, karena Anda mungkin cenderung membuat asumsi bahwa itu akan mengoreksi dirinya sendiri dengan mengarahkan pengguna ke HTTPS, padahal sering terlambat. (Ada diskusi serupa dalam pertanyaan ini. )
Saat membuat keputusan untuk melayani seluruh situs sebagai HTTPS, pengalihan semacam ini masuk akal. Saya tidak ingin pengguna mendapatkan 403 karena mereka menentukan http untuk halaman arahan mereka. Saya setuju jika seseorang TIDAK menentukan http dalam tautan dan menyebarkannya ke produksi yang buruk. HARUS ditangkap selama pengujian, bahkan dengan pengalihan di tempat. Saya tidak suka argumen "bisa" karena ini "bisa" terjadi tanpa pengalihan. Gejala-gejalanya sama ketika menguji di peramban yang aman, kecuali setelah mengonfirmasi untuk mengirim dengan jelas peralihan itu alih-alih menerima 403.
Derek Litz
Ya, saya melihat manfaat dari kegagalan yang berat jika seseorang secara keliru menempatkan http dalam bentuk tindakan, tetapi bersikap lunak dengan mengetik URL sepertinya lebih penting dalam banyak kasus.
Daniel Lubarov
4
@Aniel, saya setuju itu berguna untuk bersikap lunak ketika pengguna mengetikkan URL. Saya akan mengatakan ini adalah salah satu kasus di mana lebih baik untuk menonaktifkan fitur ini selama pengembangan / pengujian tetapi nyalakan pada produksi (atau pada tahap terakhir pengembangan / pengujian).
Bruno
mengapa tidak melakukan http to https di dns.
Muhammad Umer
1
@MuhammadUmer, karena ini tidak ada hubungannya dengan DNS. Mereka akan menggunakan nama host yang sama secara umum, tetapi bahkan dengan nama host yang berbeda, Anda masih perlu mengubah protokol dan port.
Bruno
18
Saya menemukan bahwa cara terbaik untuk https dan www di domain adalah
Ini tidak akan mengarahkan http://www.example.com/...karena kedua kondisi secara implisit DAN. Mereka seharusnya OR'd sebagai gantinya, yaitu. termasuk ORbendera pada kondisi pertama (dan ingat untuk melarikan diri dari titik-titik literal di regex). Tetapi jika Anda menerapkan HSTS maka Anda tidak ingin mengalihkan ke HTTPS dan www dalam satu pengalihan, Anda harus mengalihkan ke HTTPS terlebih dahulu .
Ini adalah metode yang tepat untuk mengarahkan HTTP ke HTTPS menggunakan .htaccess menurut GoDaddy.com. Baris kode pertama cukup jelas. Baris kedua kode memeriksa untuk melihat apakah HTTPS tidak aktif, dan jika demikian, HTTP dialihkan ke HTTPS dengan menjalankan baris kode ketiga, jika tidak, baris kode ketiga diabaikan.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Tetapi Anda juga bertanya apakah Anda bisa melakukannya dalam .htaccessfile. Dalam hal ini Anda dapat menggunakan RewriteEngine dari Apache :
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
Jika semuanya berfungsi dengan baik dan Anda ingin browser mengingat pengalihan ini, Anda dapat mendeklarasikannya sebagai permanen dengan mengubah baris terakhir ke:
Tapi hati-hati jika Anda dapat berubah pikiran tentang pengalihan ini. Browser mengingatnya untuk waktu yang sangat lama dan tidak akan memeriksa apakah itu berubah.
Anda mungkin tidak perlu baris pertama RewriteEngine Ontergantung pada konfigurasi server web.
Tampaknya dokumentasi Apache merekomendasikan terhadap rute Rewrite. Bagaimana dengan Redirect? Apa lagi yang bisa masuk dalam .htaccessfile?
Aaron Franke
Ya, Redirect lebih disukai dan dapat digunakan dalam .htaccess. Tetapi Anda tidak dapat menambahkan ketentuan untuk hanya mengarahkan lalu lintas http ke https. Ini juga mengarahkan ulang https -> loop pengalihan tak terbatas. Saya mencantumkannya dalam direktif VirtualHost yang digunakan untuk http (port 80) di atas, .htaccess tidak mendukung arahan itu dan karenanya Redirect tidak dapat digunakan di sini.
Lakukan semua yang dijelaskan di atas untuk pengalihan. Cukup tambahkan "Keamanan Transportasi HTTP Ketat" ke header Anda. Ini akan menghindari pria di tengah serangan.
Edit file konfigurasi apache Anda (/etc/apache2/sites-enabled/website.conf dan /etc/apache2/httpd.conf misalnya) dan tambahkan yang berikut ke VirtualHost Anda:
# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so
<VirtualHost 67.89.123.45:443>
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>
Untuk mengalihkan semua httppermintaan https, Anda dapat menggunakan:
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]
Jika mod-rewrite tidak diaktifkan dan Anda menggunakan apache 2.4, Anda juga dapat menggunakan arahan Redirectdalam ifuntuk mengarahkan httppermintaan https.
Jika Anda berada dalam situasi di mana Anda tidak dapat mengakses konfigurasi apache secara langsung untuk situs Anda, yang banyak platform yang dihosting masih dibatasi dengan cara ini, maka saya sebenarnya akan merekomendasikan pendekatan dua langkah. Alasan mengapa Apache sendiri mendokumentasikan bahwa Anda harus menggunakan opsi konfigurasi mereka terlebih dahulu dan terutama di atas mod_rewrite untuk HTTP ke HTTPS.
Pertama, seperti yang disebutkan di atas, Anda akan mengatur aturan .htaccess mod_rewrite Anda:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Kemudian, dalam file PHP Anda (Anda perlu melakukan ini di mana pun itu akan sesuai untuk situasi Anda, beberapa situs akan menyalurkan semua permintaan melalui satu file PHP, yang lain melayani berbagai halaman tergantung pada kebutuhan mereka dan permintaan dibuat ):
<?php if ($_SERVER['HTTPS'] != 'on') { exit(1); } ?>
Hal di atas perlu dijalankan SEBELUM kode apa pun yang berpotensi mengekspos data aman di lingkungan yang tidak aman. Dengan demikian situs Anda menggunakan pengalihan otomatis melalui HTACCESS dan mod_rewrite, sementara skrip Anda memastikan tidak ada output yang disediakan ketika tidak diakses melalui HTTPS.
Saya kira kebanyakan orang tidak berpikir seperti ini, dan karena itu Apache menyarankan Anda untuk tidak menggunakan metode ini jika memungkinkan. Namun, itu hanya membutuhkan pemeriksaan tambahan pada akhir pengembangan untuk memastikan data pengguna Anda aman. Semoga ini membantu orang lain yang mungkin harus menggunakan metode yang tidak direkomendasikan karena batasan pada layanan hosting kami berakhir.
Untuk melihatnya dalam aksi (coba tanpa www. Atau https: //, atau dengan .net alih-alih .com): https://nohodental.com/ (situs yang sedang saya kerjakan).
Jika Anda ingin melakukannya dari server kucing jantan ikuti langkah-langkah di bawah ini
Di Server HTTP Apache Tomcat (8.5.x) yang berdiri sendiri, bagaimana cara mengonfigurasinya sehingga jika pengguna mengetikkan www.domain.com, mereka akan secara otomatis diteruskan ke situs https (www.domain.com).
Metode 2 langkah termasuk yang berikut ini di [Tomcat_base] /conf/web.xml Anda sebelum tag penutup
Keunggulan lain dari masalah ini adalah ketika Load Balancer berperan.
Situasi adalah sebagai berikut: - Lalu lintas dari browser ke Load Balancer, dan kembali, adalah (seharusnya) HTTPS - Lalu lintas antara Load Balancer dan WebServer sebenarnya adalah HTTP.
Jadi, semua variabel permintaan server dalam PHP atau Apache menunjukkan bahwa koneksi hanya HTTP. Dan direktori HTTP dan HTTPS di Server sama.
RewriteCondition dalam jawaban yang disetujui tidak berfungsi. Ini memberikan satu lingkaran atau tidak berfungsi.
Pertanyaannya adalah: Bagaimana cara ini bekerja pada Load Balancer.
(Atau Load Balancer dikonfigurasi salah. Itulah yang saya harapkan karena saya dapat memindahkan masalahnya ke perusahaan WebHosting :-))
Pengalihan hanya harus terjadi pada penyeimbang beban sebagai gantinya. Bergantung pada jenis penyeimbang beban, ini harus dimungkinkan dalam konfigurasi, atau ini adalah contoh apache itu sendiri, di mana jawaban yang diterima akan bekerja. Hanya saja jangan lakukan itu pada node tunggal.
dan misalnya, http: // server / foo? email = seseorang% 40example.com dialihkan secara normal tanpa masalah. File .htaccess terletak di folder root situs web (misalnya bernama public_html). Dimungkinkan untuk menggunakan
RewriteCond% {SERVER_PORT}! ^ 443 $ sebagai gantinya RewriteCond% {HTTPS}! On
httpd
, bukan dengan PHP.http://
Jawaban:
Pembaruan: Meskipun jawaban ini telah diterima beberapa tahun yang lalu, perhatikan bahwa pendekatannya sekarang direkomendasikan untuk tidak dilakukan oleh dokumentasi Apache. Gunakan
Redirect
saja. Lihat jawaban ini .sumber
http://server/foo?email=someone%40example.com
pengalihan kehttps://server/foo?email=someone%2540example.com
yaitu tanda "@" mendapat URL yang dikutip dua kali . Menggunakan metode dalam jawaban ssc @ tidak memiliki masalah ini.In the case of the http-to-https redirection, the use of RewriteRule would be appropriate if you don't have access to the main server configuration file, and are obliged to perform this task in a .htaccess file instead.
The docs Apache merekomendasikan menggunakan penulisan ulang:
Cuplikan ini harus masuk ke file konfigurasi server utama, bukan ke
.htaccess
seperti yang ditanyakan dalam pertanyaan.Artikel ini mungkin muncul hanya setelah pertanyaan diajukan dan dijawab, tetapi tampaknya cara saat ini untuk pergi.
sumber
permanent
kata kunci, efeknya sama (browser menerima 301 redirect). Contoh:Redirect permanent "/" "https://example.com"
Saya akan merekomendasikan dengan 301 redirect:
sumber
[L]
Seperti yang saya katakan dalam pertanyaan ini , saya sarankan Anda menghindari mengarahkan semua permintaan HTTP ke HTTPS mereka secara membabi buta, karena dapat menyebabkan Anda kesan palsu tentang keamanan. Sebaliknya, Anda mungkin harus mengarahkan "root" situs HTTP Anda ke root situs HTTPS Anda dan tautan dari sana, hanya ke HTTPS.
Masalahnya adalah bahwa jika beberapa tautan atau formulir di situs HTTPS membuat klien mengirim permintaan ke situs HTTP, isinya akan terlihat, sebelum pengalihan.
Misalnya, jika salah satu halaman Anda yang ditayangkan melalui HTTPS memiliki formulir yang mengatakan
<form action="http://example.com/doSomething">
dan mengirim beberapa data yang tidak boleh dikirim dengan jelas, browser pertama-tama akan mengirim permintaan penuh (termasuk entitas, jika itu POST) ke situs HTTP pertama. Pengalihan akan segera dikirim ke browser dan, karena sejumlah besar pengguna menonaktifkan atau mengabaikan peringatan, kemungkinan akan diabaikan.Tentu saja, kesalahan menyediakan tautan yang seharusnya ke situs HTTPS tetapi akhirnya menjadi untuk situs HTTP dapat menyebabkan masalah segera setelah Anda mendapatkan sesuatu yang mendengarkan pada port HTTP pada alamat IP yang sama dengan situs HTTPS Anda. Namun, saya pikir menjaga kedua situs sebagai "cermin" hanya meningkatkan kemungkinan membuat kesalahan, karena Anda mungkin cenderung membuat asumsi bahwa itu akan mengoreksi dirinya sendiri dengan mengarahkan pengguna ke HTTPS, padahal sering terlambat. (Ada diskusi serupa dalam pertanyaan ini. )
sumber
Saya menemukan bahwa cara terbaik untuk https dan www di domain adalah
sumber
http://www.example.com/...
karena kedua kondisi secara implisit DAN. Mereka seharusnya OR'd sebagai gantinya, yaitu. termasukOR
bendera pada kondisi pertama (dan ingat untuk melarikan diri dari titik-titik literal di regex). Tetapi jika Anda menerapkan HSTS maka Anda tidak ingin mengalihkan ke HTTPS dan www dalam satu pengalihan, Anda harus mengalihkan ke HTTPS terlebih dahulu .Ini adalah pendekatan pengalihan html yang berfungsi tetapi bukan yang terbaik.
Pendekatan PHP
.htaccess approch
disalin dari: www.letuslook.org
sumber
.htaccess
? Juga, tautan itu sudah mati.Saya suka metode pengalihan ini dari http ke https. Karena saya tidak perlu mengeditnya untuk setiap situs.
sumber
Menggunakan kode berikut dalam file .htaccess Anda secara otomatis mengalihkan pengunjung ke versi HTTPS situs Anda:
Jika Anda memiliki file .htaccess yang ada:
Jangan menduplikasi RewriteEngine On.
Pastikan baris yang memulai RewriteCond dan RewriteRule segera ikuti RewriteEngine On yang sudah ada.
sumber
Ini adalah metode yang tepat untuk mengarahkan HTTP ke HTTPS menggunakan .htaccess menurut GoDaddy.com. Baris kode pertama cukup jelas. Baris kedua kode memeriksa untuk melihat apakah HTTPS tidak aktif, dan jika demikian, HTTP dialihkan ke HTTPS dengan menjalankan baris kode ketiga, jika tidak, baris kode ketiga diabaikan.
https://www.godaddy.com/help/redirect-http-to-https-automatically-8828
sumber
Solusi terbaik tergantung pada kebutuhan Anda. Ini adalah ringkasan dari jawaban yang diposting sebelumnya dengan beberapa konteks yang ditambahkan.
Jika Anda bekerja dengan server web Apache dan dapat mengubah konfigurasinya, ikuti dokumentasi Apache :
Tetapi Anda juga bertanya apakah Anda bisa melakukannya dalam
.htaccess
file. Dalam hal ini Anda dapat menggunakan RewriteEngine dari Apache :Jika semuanya berfungsi dengan baik dan Anda ingin browser mengingat pengalihan ini, Anda dapat mendeklarasikannya sebagai permanen dengan mengubah baris terakhir ke:
Tapi hati-hati jika Anda dapat berubah pikiran tentang pengalihan ini. Browser mengingatnya untuk waktu yang sangat lama dan tidak akan memeriksa apakah itu berubah.
Anda mungkin tidak perlu baris pertama
RewriteEngine On
tergantung pada konfigurasi server web.Jika Anda mencari solusi PHP, lihat array $ _SERVER dan fungsi header :
sumber
.htaccess
file?Tambahkan kode berikut ke file .htaccess:
Di mana [nama domain Anda] adalah nama domain situs web Anda.
Anda juga dapat mengalihkan folder tertentu dari nama domain Anda dengan mengganti baris terakhir dari kode di atas dengan:
sumber
Lakukan semua yang dijelaskan di atas untuk pengalihan. Cukup tambahkan "Keamanan Transportasi HTTP Ketat" ke header Anda. Ini akan menghindari pria di tengah serangan.
https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
sumber
Untuk mengalihkan semua
http
permintaanhttps
, Anda dapat menggunakan:Jika mod-rewrite tidak diaktifkan dan Anda menggunakan apache 2.4, Anda juga dapat menggunakan arahan
Redirect
dalamif
untuk mengarahkanhttp
permintaanhttps
.Apache 2.4.
sumber
Jika Anda berada dalam situasi di mana Anda tidak dapat mengakses konfigurasi apache secara langsung untuk situs Anda, yang banyak platform yang dihosting masih dibatasi dengan cara ini, maka saya sebenarnya akan merekomendasikan pendekatan dua langkah. Alasan mengapa Apache sendiri mendokumentasikan bahwa Anda harus menggunakan opsi konfigurasi mereka terlebih dahulu dan terutama di atas mod_rewrite untuk HTTP ke HTTPS.
Pertama, seperti yang disebutkan di atas, Anda akan mengatur aturan .htaccess mod_rewrite Anda:
Kemudian, dalam file PHP Anda (Anda perlu melakukan ini di mana pun itu akan sesuai untuk situasi Anda, beberapa situs akan menyalurkan semua permintaan melalui satu file PHP, yang lain melayani berbagai halaman tergantung pada kebutuhan mereka dan permintaan dibuat ):
Hal di atas perlu dijalankan SEBELUM kode apa pun yang berpotensi mengekspos data aman di lingkungan yang tidak aman. Dengan demikian situs Anda menggunakan pengalihan otomatis melalui HTACCESS dan mod_rewrite, sementara skrip Anda memastikan tidak ada output yang disediakan ketika tidak diakses melalui HTTPS.
Saya kira kebanyakan orang tidak berpikir seperti ini, dan karena itu Apache menyarankan Anda untuk tidak menggunakan metode ini jika memungkinkan. Namun, itu hanya membutuhkan pemeriksaan tambahan pada akhir pengembangan untuk memastikan data pengguna Anda aman. Semoga ini membantu orang lain yang mungkin harus menggunakan metode yang tidak direkomendasikan karena batasan pada layanan hosting kami berakhir.
sumber
Melalui .htaccess Ini akan membantu.
Juga, Lihat ini untuk Lebih Detail. Bagaimana Mengarahkan Http Ke Https?
sumber
Kecuali Anda memerlukan mod_rewrite untuk hal-hal lain, menggunakan Apache core IF direktif lebih bersih & lebih cepat:
Anda dapat menambahkan lebih banyak kondisi ke direktif IF, seperti memastikan satu domain kanonik tanpa awalan www:
Ada banyak inersia keakraban dalam menggunakan mod_rewrite untuk semuanya, tetapi lihat apakah ini bekerja untuk Anda.
Info lebih lanjut: https://httpd.apache.org/docs/2.4/mod/core.html#if
Untuk melihatnya dalam aksi (coba tanpa www. Atau https: //, atau dengan .net alih-alih .com): https://nohodental.com/ (situs yang sedang saya kerjakan).
sumber
ambil kode ini untuk Anda. File htaccess. Redirect HTTP ke HTTPS secara otomatis
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
sumber
Saya menemukan metode untuk memaksa semua halaman situs saya dialihkan dari http ke halaman analog di https yang berfungsi untuk saya.
sumber
(bekerja untuk saya ketika tidak ada jawaban di atas yang berfungsi)
Bonus:
(https tetap: // www .example.com tidak ditemukan)
sumber
Ini mengalihkan semua URL ke https dan www
sumber
Jika Anda ingin melakukannya dari server kucing jantan ikuti langkah-langkah di bawah ini
Di Server HTTP Apache Tomcat (8.5.x) yang berdiri sendiri, bagaimana cara mengonfigurasinya sehingga jika pengguna mengetikkan www.domain.com, mereka akan secara otomatis diteruskan ke situs https (www.domain.com).
Metode 2 langkah termasuk yang berikut ini di [Tomcat_base] /conf/web.xml Anda sebelum tag penutup
dan mengatur pengaturan konektor [Tomcat_base] /conf/server.xml:
Catatan: Jika Anda sudah melakukan konfigurasi https dan mencoba untuk mengarahkan ulang lakukan langkah 1 saja.
sumber
Jika Anda menggunakan Apache, mod_rewrite adalah solusi termudah, dan memiliki banyak dokumentasi online tentang cara melakukannya. Misalnya: http://www.askapache.com/htaccess/http-https-rewriterule-redirect.html
sumber
Keunggulan lain dari masalah ini adalah ketika Load Balancer berperan.
Situasi adalah sebagai berikut: - Lalu lintas dari browser ke Load Balancer, dan kembali, adalah (seharusnya) HTTPS - Lalu lintas antara Load Balancer dan WebServer sebenarnya adalah HTTP.
Jadi, semua variabel permintaan server dalam PHP atau Apache menunjukkan bahwa koneksi hanya HTTP. Dan direktori HTTP dan HTTPS di Server sama.
RewriteCondition dalam jawaban yang disetujui tidak berfungsi. Ini memberikan satu lingkaran atau tidak berfungsi.
Pertanyaannya adalah: Bagaimana cara ini bekerja pada Load Balancer.
(Atau Load Balancer dikonfigurasi salah. Itulah yang saya harapkan karena saya dapat memindahkan masalahnya ke perusahaan WebHosting :-))
sumber
Jika Anda menggunakan Amazon Web Services Elastic Load Balancer yang menerima lalu lintas https dan mengarahkannya ke server Anda dengan http, cara yang benar untuk mengarahkan semua lalu lintas http ke https dijelaskan di sini: https://aws.amazon. com / premiumsupport / pusat pengetahuan / redirect-http-https-elb
Gunakan tajuk X-Forwarded-Proto (berisi http atau https) yang selalu disertakan dalam permintaan http dari penyeimbang beban, seperti dijelaskan di sini: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x- forwarded-headers.html
Dalam file httpd.conf:
Atau di file .htaccess root Anda:
Bonus: itu tidak akan mencoba mengarahkan lalu lintas http pada mesin pengembangan lokal Anda.
sumber
Ini bekerja untuk saya:
dan misalnya, http: // server / foo? email = seseorang% 40example.com dialihkan secara normal tanpa masalah. File .htaccess terletak di folder root situs web (misalnya bernama public_html). Dimungkinkan untuk menggunakan RewriteCond% {SERVER_PORT}! ^ 443 $ sebagai gantinya RewriteCond% {HTTPS}! On
sumber