Przekierowanie http do https apache

157

Środowisko Centos z Apache

Próbuję ustawić automatyczne przekierowanie z http na https

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

Próbowałem dodać następujące elementy do mojego httpd.conf, ale to nie zadziałało

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

Jakieś pomysły?

Deano
źródło

Odpowiedzi:

209

Właściwie poszedłem za tym przykładem i zadziałało dla mnie :)

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>

Następnie wykonaj:

/etc/init.d/httpd restart

Deano
źródło
7
Zauważ, że jest to dostępne tylko wtedy, gdy masz dostęp do pliku VirtualHost. Jest to zalecana metoda.
foochow
4
Po zmianie tego na httpd.conf, zrestartuj serwer WWW Apache. dzięki czemu będzie odzwierciedlać i wyczyścić pamięć podręczną przeglądarki.
Suriyan Suresh
2
Chciałbym zgłosić, że ta metoda nie działała dla mnie z Ubuntu 12.4, jednak proponowana odpowiedź RewriteEngine załatwiła sprawę.
Deano,
2
czy musisz zrobić restart? przeładowanie jest znacznie mniej destrukcyjne i przyniesie nowy plik konfiguracyjny. /etc/init.d/httpd reload|| service httpd reload
Rebecca Dessonville
3
ponieważ celem było przekierowanie go do trybu ssl, linia DocumentRoot /usr/local/apache2/htdocsnie jest już potrzebna
Abel Callejo
130
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

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

lub

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

IdemeNaHavaj
źródło
3
Jest to lepsze rozwiązanie niż zatwierdzone, ponieważ działa nawet jeśli korzystasz z odciążającego SSL, takiego jak Pound lub BigIP. Te odciążające często przekazują cały ruch do tego samego portu, a zatwierdzone rozwiązanie nie zadziała w tym konkretnym przypadku
spiritoo
1
@spiritoo Nie tak. Dokumentacja Apache wyraźnie mówi, że jest to jedna z tych sytuacji, w których nie powinieneś używać mod_rewrite i powinieneś raczej użyć Redirect: httpd.apache.org/docs/2.4/rewrite/avoid.html
Luke Madhanga
4
@LukeMadhanga Apache docrecommands używając przekierowania do wydajności. Jednak rozwiązanie RewriteEngine jest lepsze, w sensie bardziej ogólnym, bo działa nawet w opisanym przeze mnie przypadku (odciążanie). Celem mojego komentarza jest zapewnienie każdemu użytkownikowi klucza do wyboru jednej z dwóch odpowiedzi. Niektórzy ludzie chcą ogólnych procedur (duży korpus), inni chcą wydajności ... to wolny wybór.
spiritoo
20
Jest to jednak świetne, jeśli chcesz, aby było większe, dodaj to [R = 302, L, QSA], aby wszelkie parametry były również przekazywane do bezpiecznej strony. Powinien wyglądać następująco:% {REQUEST_URI} [R = 302, L, QSA]
Svetoslav Marinov,
Użyłem tych linii i kiedy próbuję załadować stronę, odpowiedź brzmi „Nie udało się załadować zasobu: net :: ERR_CONNECTION_REFUSED”. Co ja robię źle?
Serkan
98

Szukałem apache redirect http to httpsi wylądowałem tutaj. Oto, co zrobiłem na Ubuntu:

1) Włącz moduły

sudo a2enmod rewrite
sudo a2enmod ssl

2) Edytuj konfigurację witryny

Edytuj plik

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

Treść powinna być:

<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) Uruchom ponownie Apache2

sudo service apache2 restart
Jossef Harush
źródło
Pracuj z Ubuntu 16.04 i Apache2. Dzięki!
Sylvester Yao
11

Właściwie Twój temat należy do https://serverfault.com/, ale nadal możesz spróbować sprawdzić te dyrektywy .htaccess :

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1
5ervant
źródło
11

Używanie mod_rewrite nie jest zalecanym sposobem, zamiast tego użyj wirtualnego hosta i przekierowania.

W przypadku, jeśli masz ochotę to zrobić za pomocą 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

Odniesienie: Httpd Wiki - RewriteHTTPToHTTPS

Jeśli szukasz stałego przekierowania 301, flaga przekierowania powinna mieć postać,

 R=301

więc Reguła Rewrite będzie wyglądać następująco:

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
Vincy
źródło
6

Jeśli masz Apache2.4, sprawdź 000-default.conf- usuń DocumentRooti dodaj

Redirect permanent / https://[your-domain]/
obojętność
źródło
5

Wersja serwera: Apache / 2.4.29 (Ubuntu)

Po długich poszukiwaniach w sieci i oficjalnej dokumentacji Apache, jedynym rozwiązaniem, które działało, było /usr/share/doc/apache2/README.Debian.gz

To enable SSL, type (as user root):

    a2ensite default-ssl
    a2enmod ssl

W pliku /etc/apache2/sites-available/000-default.conf dodaj rozszerzenie

Przekierowanie „/” „ https://sub.domain.com/

<VirtualHost *:80>

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

Otóż ​​to.


PS: Jeśli chcesz przeczytać instrukcję bez wypakowywania:

gunzip -cd /usr/share/doc/apache2/README.Debian.gz
DimiDak
źródło
3

To zadziałało dla mnie:

RewriteCond %{HTTPS} =off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]
Fint
źródło
3

Ten kod działa dla mnie.

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

user7817632
źródło
2

Spróbuj tego w konfiguracji Apache Virtualhosting, a następnie załaduj ponownie usługę Apache

RewriteEngine On

RewriteCond %{HTTPS} off


RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
MD IRFAN
źródło
-1

Potrzebowałem tego do czegoś tak prostego, jak przekierowanie całego httpruchu z domyślnej strony głównej Apache na moim serwerze na jedną obsługiwaną https.

Ponieważ nadal jestem dość zielony, jeśli chodzi o konfigurowanie apache, wolę unikać mod_rewritebezpośredniego używania i zamiast tego wybrałem coś prostszego:

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

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

Podoba mi się to, ponieważ pozwoliło mi to na użycie zmiennych Apache i w ten sposób nie musiałem określać rzeczywistej nazwy hosta, ponieważ jest to tylko adres IP bez skojarzonej nazwy domeny.

Źródła: https://stackoverflow.com/a/40291044/2089675

smac89
źródło