http ke https pengalihan apache


157

Centos Lingkungan dengan apache

Mencoba mengatur pengalihan otomatis dari http ke https

From manage.mydomain.com --- To ---> https://manage.mydomain.com 

Saya telah mencoba menambahkan berikut ini ke httpd.conf saya tetapi tidak berhasil

 RewriteEngine on
    ReWriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]

Ada ide?

Jawaban:


210

Saya benar-benar mengikuti contoh ini dan itu berhasil untuk saya :)

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName mysite.example.com
   Redirect permanent / https://mysite.example.com/
</VirtualHost>

<VirtualHost _default_:443>
   ServerName mysite.example.com
  DocumentRoot /usr/local/apache2/htdocs
  SSLEngine On
 # etc...
</VirtualHost>

Kemudian lakukan:

/etc/init.d/httpd restart


7
Perhatikan bahwa ini hanya tersedia jika Anda memiliki akses ke file VirtualHost. Ini adalah metode yang direkomendasikan.
foochow

4
Setelah mengubah ini di httpd.conf, restart server web apache. sehingga itu akan mencerminkan dan menghapus cache browser Anda juga.
Suriyan Suresh

2
Saya ingin melaporkan bahwa metode ini tidak berhasil untuk saya dengan Ubuntu 12.4, namun jawaban RewriteEngine yang diusulkan berhasil.
Deano

2
apakah kamu harus melakukan restart? memuat ulang tidak terlalu merusak dan akan membawa file konfigurasi baru. /etc/init.d/httpd reload|| service httpd reload
Rebecca Dessonville

3
karena tujuannya adalah untuk mengarahkan ulang ke mode ssl, saluran DocumentRoot /usr/local/apache2/htdocstidak lagi diperlukan
Abel Callejo

130
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

http://www.sslshopper.com/apache-redirect-http-to-https.html

atau

http://www.cyberciti.biz/tips/howto-apache-force-https-secure-connections.html


3
Ini adalah solusi yang lebih baik daripada yang disetujui, karena ini akan bekerja bahkan jika Anda berada di belakang pembongkar SSL seperti Pound atau BigIP. Offloader itu akan sering melewati semua lalu lintas ke port yang sama, dan solusi yang disetujui tidak akan bekerja dalam kasus khusus itu
Spiritoo

1
@spiritoo Tidak begitu. Dokumentasi Apache secara khusus mengatakan bahwa ini adalah salah satu situasi di mana Anda tidak boleh menggunakan mod_rewrite dan lebih baik menggunakan Redirect: httpd.apache.org/docs/2.4/rewrite/avoid.html
Luke Madhanga

4
@LukeMadhanga dokumentasi Apache menggunakan Redirect untuk kinerja. Tapi tetap saja, solusi RewriteEngine lebih baik, dalam arti lebih umum, karena ia berfungsi bahkan dalam kasus yang saya jelaskan (offloading). Tujuan dari komentar saya adalah untuk memberikan setiap pengguna kunci untuk memilih antara dua jawaban. Beberapa orang menginginkan prosedur generik (korps besar), yang lain menginginkan kinerja ... itu pilihan bebas.
spiritoo

20
Ini bagus, namun, jika Anda ingin membuatnya lebih besar maka tambahkan ini [R = 302, L, QSA] sehingga parameter apa pun juga diteruskan ke halaman aman. Seharusnya terlihat seperti:% {REQUEST_URI} [R = 302, L, QSA]
Svetoslav Marinov

Saya menggunakan baris ini dan ketika mencoba memuat halaman, responsnya adalah "Gagal memuat sumber daya: net :: ERR_CONNECTION_REFUSED". Apa yang saya lakukan salah?
Serkan

98

Mencari apache redirect http to httpsdan mendarat di sini. Inilah yang saya lakukan di ubuntu:

1) Aktifkan modul

sudo a2enmod rewrite
sudo a2enmod ssl

2) Edit konfigurasi situs Anda

Edit file

/etc/apache2/sites-available/000-default.conf

Konten harus:

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

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile    <path to your crt file>
    SSLCertificateKeyFile   <path to your private key file>

    # Rest of your site config
    # ...
</VirtualHost>

3) Mulai ulang apache2

sudo service apache2 restart

Bekerja dengan Ubuntu 16.04 & Apache2. Terima kasih!
Sylvester Yao

11

Sebenarnya, topik Anda adalah milik https://serverfault.com/ tetapi Anda masih dapat mencoba memeriksa arahan .htaccess ini :

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1

11

Menggunakan mod_rewrite bukan cara yang disarankan sebagai gantinya menggunakan virtual host dan redirect.

Dalam hal ini, jika Anda cenderung menggunakan mod_rewrite:

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same 
location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in
# httpd.conf or .htaccess context

Referensi: Httpd Wiki - RewriteHTTPToHTTPS

Jika Anda mencari Pengalihan Permanen 301, maka bendera pengalihan harus seperti,

 R=301

jadi RewriteRule akan menjadi seperti,

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

6

Jika Anda memiliki Apache2.4 centang 000-default.conf- hapus DocumentRootdan tambahkan

Redirect permanent / https://[your-domain]/

5

Versi server: Apache / 2.4.29 (Ubuntu)

Setelah lama mencari di web dan dalam dokumentasi resmi apache, satu-satunya solusi yang bekerja untuk saya berasal dari /usr/share/doc/apache2/README.Debian.gz

To enable SSL, type (as user root):

    a2ensite default-ssl
    a2enmod ssl

Dalam file /etc/apache2/sites-available/000-default.conf tambahkan

Redirect "/" " https://sub.domain.com/ "

<VirtualHost *:80>

    #ServerName www.example.com
    DocumentRoot /var/www/owncloud
    Redirect "/" "https://sub.domain.com/"

Itu dia.


PS: Jika Anda ingin membaca manual tanpa mengekstraksi:

gunzip -cd /usr/share/doc/apache2/README.Debian.gz

3

Ini bekerja untuk saya:

RewriteCond %{HTTPS} =off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]

3

Kode ini berfungsi untuk saya.

# ----------port 80----------
RewriteEngine on
# redirect http non-www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

# redirect http www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

# ----------port 443----------
RewriteEngine on
# redirect https non-www to https www
RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC]
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]


2

Silakan coba yang ini di konfigurasi apache Virtualhosting lalu muat ulang layanan apache

RewriteEngine On

RewriteCond %{HTTPS} off


RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

-1

Saya membutuhkan ini untuk sesuatu yang sederhana seperti mengarahkan semua httplalu lintas dari halaman beranda apache default di server saya ke satu yang ditayangkan https.

Karena saya masih cukup hijau dalam hal mengkonfigurasi apache, saya lebih memilih untuk tidak menggunakan mod_rewritesecara langsung dan bukannya mencari sesuatu yang lebih sederhana seperti ini:

<VirtualHost *:80>
  <Location "/">
     Redirect permanent "https://%{HTTP_HOST}%{REQUEST_URI}"
  </Location>
</VirtualHost>

<VirtualHost *:443>
  DocumentRoot "/var/www/html"
  SSLEngine on
  ...
</VirtualHost>

Saya suka ini karena itu memungkinkan saya untuk menggunakan variabel apache dan dengan cara itu saya tidak perlu menentukan nama host yang sebenarnya karena itu hanya alamat IP tanpa nama domain yang terkait.

Referensi: https://stackoverflow.com/a/40291044/2089675

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.