Cara mengalihkan semua permintaan HTTP ke HTTPS


294

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?


1
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 .
Mei

Jawaban:


305

Pembaruan: Meskipun jawaban ini telah diterima beberapa tahun yang lalu, perhatikan bahwa pendekatannya sekarang direkomendasikan untuk tidak dilakukan oleh dokumentasi Apache. Gunakan Redirectsaja. Lihat jawaban ini .


RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

24
@ 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:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

Cuplikan ini harus masuk ke file konfigurasi server utama, bukan ke .htaccessseperti yang ditanyakan dalam pertanyaan.

Artikel ini mungkin muncul hanya setelah pertanyaan diajukan dan dijawab, tetapi tampaknya cara saat ini untuk pergi.


11
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]

7
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. )


1
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

RewriteCond %{HTTPS} off 
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

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 .
MrWhite

Di mana saya meletakkan teks ini?
Aaron Franke

Pada jenis pertanyaan yang serupa. Adakah yang bisa membantu dengan pertanyaan di bawah ini? stackoverflow.com/questions/59503217/...
appsntech

14

Ini adalah pendekatan pengalihan html yang berfungsi tetapi bukan yang terbaik.

 <meta http-equiv="Refresh" content="0;URL=https://www.example.com" />

Pendekatan PHP

<?php
function redirectTohttps() {
    if ($_SERVER['HTTPS']!="on") {
        $redirect= "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        header("Location:$redirect"); 
    } 
}
?>

.htaccess approch

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

disalin dari: www.letuslook.org


Kemana perginya .htaccess? Juga, tautan itu sudah mati.
Aaron Franke

8

Saya suka metode pengalihan ini dari http ke https. Karena saya tidak perlu mengeditnya untuk setiap situs.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Di mana saya meletakkan teks ini?
Aaron Franke

6

Menggunakan kode berikut dalam file .htaccess Anda secara otomatis mengalihkan pengunjung ke versi HTTPS situs Anda:

RewriteEngine On

RewriteCond %{HTTPS} off

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

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.


Apa arti L dan R?
Aaron Franke

5

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]

https://www.godaddy.com/help/redirect-http-to-https-automatically-8828


5

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 :

<VirtualHost *:80>
    ServerName www.example.com
    Redirect "/" "https://www.example.com/"
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

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:

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

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.

Jika Anda mencari solusi PHP, lihat array $ _SERVER dan fungsi header :

if (!$_SERVER['HTTPS']) {
    header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
} 

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.
maikel

4

Tambahkan kode berikut ke file .htaccess:

Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^ https://[your domain name]%{REQUEST_URI} [R,L]

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:

RewriteRule ^ https://[your domain name]/[directory name]%{REQUEST_URI} [R,L]

Apa arti L dan R?
Aaron Franke

4

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>

https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security


2

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.

Apache 2.4.

<if "%{HTTPS} !~ /on/">
Redirect / https://www.example.com/
</if>

2

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.


1

Melalui .htaccess Ini akan membantu.

RewriteEngine On


RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Juga, Lihat ini untuk Lebih Detail. Bagaimana Mengarahkan Http Ke Https?


1
Ini adalah solusi untuk siapa pun yang mendapat "Terlalu banyak kesalahan arahan ulang" dan tidak dapat mengubah properti allowOverride.
Evochrome

1

Kecuali Anda memerlukan mod_rewrite untuk hal-hal lain, menggunakan Apache core IF direktif lebih bersih & lebih cepat:

<If "%{HTTPS} == 'off'">
Redirect permanent / https://yoursite.com/
</If>

Anda dapat menambahkan lebih banyak kondisi ke direktif IF, seperti memastikan satu domain kanonik tanpa awalan www:

<If "req('Host') != 'myonetruesite.com' || %{HTTPS} == 'off'">
Redirect permanent / https://myonetruesite.com/
</If>

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).



0

Saya menemukan metode untuk memaksa semua halaman situs saya dialihkan dari http ke halaman analog di https yang berfungsi untuk saya.

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

0
 Redirect 301 / https://example.com/

(bekerja untuk saya ketika tidak ada jawaban di atas yang berfungsi)

Bonus:

ServerAlias www.example.com example.com

(https tetap: // www .example.com tidak ditemukan)


0

Ini mengalihkan semua URL ke https dan www

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC,OR]
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

0

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

step 1: 
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPSOnly</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

dan mengatur pengaturan konektor [Tomcat_base] /conf/server.xml:

step 2:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443"/>
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="[keystorelocation]" type="RSA" />
</SSLHostConfig>
</Connector>

Catatan: Jika Anda sudah melakukan konfigurasi https dan mencoba untuk mengarahkan ulang lakukan langkah 1 saja.



-1

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.
marc82ch

-1

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:

<VirtualHost *:80>

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

</VirtualHost>

Atau di file .htaccess root Anda:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

Bonus: itu tidak akan mencoba mengarahkan lalu lintas http pada mesin pengembangan lokal Anda.


-1

Ini bekerja untuk saya:

<IfModule mod_rewrite.c>
 RewriteEngine On
  RewriteCond %{HTTPS} !on
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

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

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.