http zu https Apache-Umleitung

156

Umwelt Centos mit Apache

Es wird versucht, die automatische Umleitung von http nach https einzurichten

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

Ich habe versucht, Folgendes zu meiner httpd.conf hinzuzufügen, aber es hat nicht funktioniert

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

Irgendwelche Ideen?

Deano
quelle

Antworten:

209

Ich bin diesem Beispiel tatsächlich gefolgt und es hat bei mir funktioniert :)

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>

Dann mach:

/etc/init.d/httpd restart

Deano
quelle
7
Beachten Sie, dass dies nur verfügbar ist, wenn Sie Zugriff auf die VirtualHost-Datei haben. Dies ist die empfohlene Methode.
Foochow
4
Nachdem Sie dies auf httpd.conf geändert haben, starten Sie den Apache-Webserver neu. damit es auch Ihren Browser-Cache widerspiegelt und löscht.
Suriyan Suresh
2
Ich möchte berichten, dass diese Methode mit Ubuntu 12.4 bei mir nicht funktioniert hat, aber die vorgeschlagene Antwort von RewriteEngine hat es geschafft.
Deano
2
Müssen Sie einen Neustart durchführen? Ein Neuladen ist viel weniger destruktiv und bringt die neue Konfigurationsdatei. /etc/init.d/httpd reload|| service httpd reload
Rebecca Dessonville
3
Da der Zweck darin bestand, es in den SSL-Modus umzuleiten, wird die Leitung DocumentRoot /usr/local/apache2/htdocsnicht mehr benötigt
Abel Callejo
129
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

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

oder

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

IdemeNaHavaj
quelle
3
Dies ist eine bessere Lösung als die genehmigte, da sie auch dann funktioniert, wenn Sie sich hinter einem SSL-Offloader wie Pound oder BigIP befinden. Diese Offloader leiten häufig den gesamten Datenverkehr an denselben Port weiter, und die genehmigte Lösung funktioniert in diesem speziellen Fall nicht
spiritoo
1
@spiritoo Nicht so. Die Apache-Dokumente sagen ausdrücklich, dass dies eine der Situationen ist, in denen Sie nicht mod_rewrite verwenden sollten, sondern Redirect verwenden sollten: httpd.apache.org/docs/2.4/rewrite/avoid.html
Luke Madhanga
4
@LukeMadhanga Apache-Dokumente empfehlen die Verwendung von Redirect für die Leistung. Trotzdem ist die RewriteEngine-Lösung im Sinne einer allgemeineren Lösung besser, da sie auch in dem von mir beschriebenen Fall (Offloading) funktioniert. Das Ziel meines Kommentars ist es, jedem Benutzer den Schlüssel zur Auswahl zwischen den beiden Antworten zu geben. Einige Leute wollen generische Verfahren (großes Korps), andere wollen Leistung ... es ist eine freie Wahl.
Spiritoo
19
Dies ist jedoch großartig, wenn Sie es vergrößern möchten, fügen Sie dieses [R = 302, L, QSA] hinzu, damit alle Parameter auch an die sichere Seite übergeben werden. Es sollte so aussehen:% {REQUEST_URI} [R = 302, L, QSA]
Svetoslav Marinov
Ich habe diese Zeilen verwendet und beim Versuch, eine Seite zu laden, lautet die Antwort "Ressource konnte nicht geladen werden: net :: ERR_CONNECTION_REFUSED". Was mache ich falsch?
Serkan
98

Hier gesucht apache redirect http to httpsund gelandet. Das habe ich auf Ubuntu gemacht:

1) Module aktivieren

sudo a2enmod rewrite
sudo a2enmod ssl

2) Bearbeiten Sie Ihre Site-Konfiguration

Datei bearbeiten

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

Inhalt sollte sein:

<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>
  • Beachten Sie, dass für das SSL-Modul ein Zertifikat erforderlich ist. Sie müssen ein vorhandenes angeben (falls Sie eines gekauft haben) oder selbst ein selbstsigniertes Zertifikat erstellen.

3) Starten Sie apache2 neu

sudo service apache2 restart
Jossef Harush
quelle
Arbeiten Sie mit Ubuntu 16.04 & Apache2. Vielen Dank!
Sylvester Yao
11

Eigentlich gehört Ihr Thema zu https://serverfault.com/, aber Sie können trotzdem versuchen, diese .htaccess- Anweisungen zu überprüfen :

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

Die Verwendung von mod_rewrite wird nicht empfohlen. Verwenden Sie stattdessen den virtuellen Host und die Umleitung.

Falls Sie dazu neigen, mod_rewrite zu verwenden:

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

Referenz: Httpd Wiki - RewriteHTTPToHTTPS

Wenn Sie nach einer permanenten 301-Umleitung suchen, sollte das Umleitungsflag wie folgt lauten:

 R=301

so wird die RewriteRule sein wie:

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

Wenn Sie Apache2.4 haben, überprüfen Sie 000-default.conf- entfernen DocumentRootund hinzufügen

Redirect permanent / https://[your-domain]/
Gleichgültigkeit
quelle
5

Serverversion: Apache / 2.4.29 (Ubuntu)

Nach langer Suche im Internet und in der offiziellen Dokumentation von Apache kam die einzige Lösung, die für mich funktionierte, von /usr/share/doc/apache2/README.Debian.gz

To enable SSL, type (as user root):

    a2ensite default-ssl
    a2enmod ssl

Fügen Sie in der Datei /etc/apache2/sites-available/000-default.conf das hinzu

Weiterleiten von "/" " https://sub.domain.com/ "

<VirtualHost *:80>

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

Das ist es.


PS: Wenn Sie das Handbuch lesen möchten, ohne es zu extrahieren:

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

Das hat bei mir funktioniert:

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

Dieser Code funktioniert für mich.

# ----------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
quelle
2

Bitte versuchen Sie dies in der Apache Virtualhosting-Konfiguration und laden Sie dann den Apache-Dienst neu

RewriteEngine On

RewriteCond %{HTTPS} off


RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
MD IRFAN
quelle
-1

Ich brauchte dies für etwas so Einfaches wie das Umleiten des gesamten httpDatenverkehrs von der Standard-Apache-Homepage auf meinem Server auf eine übergelieferte https.

Da ich bei der Konfiguration von Apache immer noch ziemlich grün bin, vermeide ich die mod_rewritedirekte Verwendung und habe mich stattdessen für etwas Einfacheres wie das Folgende entschieden:

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

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

Ich mag das, weil ich damit Apache-Variablen verwenden konnte und auf diese Weise nicht den tatsächlichen Hostnamen angeben musste, da es sich nur um eine IP-Adresse ohne zugeordneten Domänennamen handelt.

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

smac89
quelle