2012-10-21 14 views
52

Ich versuche, https://www.example.com zu http://www.example.com umleiten. Ich habe versucht, den folgenden Code in der Datei .htaccessHttps zu http Redirect mit htaccess

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

Dieser Code erfolgreich leitet https://example.com zu http://www.example.com. Jedoch, wenn ich https://www.example.com eintippe, dann gibt es mir einen Fehler "Webseite nicht verfügbar" im Browser.

Ich habe versucht, auch die folgenden 2-Codes ohne Erfolg

Versuch 1

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule ^/(.*):NOSSL$ http://www.example.com/$1 [R=301,L] 

Versuch 2

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

Beide oben Versuche schlugen fehl. Irgendwelche Vorschläge?

Antwort

82

Versuch 2 war nahezu perfekt. leicht ändern Sie es einfach:

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+5

wird gut 'R = 302' zu verwenden, wenn Sie nicht wünschen, _permanent_ zu machen. Dies brachte mich in Schwierigkeiten, als mein SSL abgelaufen war und ich vorübergehend zu "http" zurückkehren wollte, bevor ich die schmerzhaften Erneuerungsverfahren durchlief. – ProfNandaa

+0

Schmerzhafte Erneuerung? Dies sollte entweder ein Umdrehen der Certificare-Dateien oder eine einfache Ausführung des Skripts sein ... Das Problem bei 302 ist, dass die Clients es jedes Mal befolgen müssen, sodass Sie die Anzahl der Anfragen für die Client- und Serverseite erhöhen. – arkascha

+0

@arkascha wollte nur verstehen, die RewriteCond wird als eine if-Anweisung schreiben? Ich meine nur, wo es https findet, wird es die nächste Rewrite-Regel ausführen. Ich frage, da Google automatisch einige https-URLs in seinen Index aufgenommen hat, ohne dass wir sie irgendwo verlinkt haben. Um also auszuschließen, verwenden wir den oben genannten Code um alle https URL –

6
RewriteEngine On 
RewriteCond %{SERVER_PORT} 443 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+0

Dies scheint den Trick zu tun, wenn andere nicht würden! –

22

Allerdings, wenn Ihre Website ist nicht ein Sicherheitszertifikat hat, es auf einer Shared-Hosting-Umgebung ist, und Sie wollen nicht die „Warnung“ erhalten, wenn Ihre Website Wenn Sie über HTTPS angefordert werden, können Sie ihn nicht mit htaccess umleiten. Der Grund dafür ist, dass die Warnmeldung ausgelöst wird, bevor die Anforderung sogar an die Datei htaccess übergeben wird. Sie müssen sie daher auf dem Server beheben. Gehen Sie zu /etc/httpd/conf.d/ssl.conf und kommentieren Sie den Teil über den virtuellen Server 443. Aber die Chancen stehen gut, dass Ihr Hosting-Provider Ihnen nicht so viel Kontrolle geben wird. Sie müssten also entweder zu einem anderen Host wechseln oder das SSL kaufen, damit die Warnung nicht ausgelöst wird, bevor Ihr htaccess die Möglichkeit hat, umzuleiten.

+1

Vielen Dank für diese Antwort. Da unsere bestehende Website kein SSL-Zertifikat hat, ist es egal, wie korrekt mein .htaccess ist, wird es nicht funktionieren. – marknt15

+0

@arkascha Ich habe die verschiedenen Methoden hier getestet, aber keine funktioniert. Ja, ich habe in einer gemeinsamen Umgebung getestet. SSL ist nicht aktiv, obwohl ein freigegebenes SSL frei ist.Der fragliche HTTPS-Link war historisch/geerbt von einer zuvor SSL-fähigen Umgebung. Ich habe nichts gegen die Browserwarnung (im Dev-Modus), aber ich brauchte zumindest die Weiterleitung. Kann jemand mehr Leads anbieten? –

1

Der Unterschied zwischen http und https besteht darin, dass https-Anfragen über eine SSL-verschlüsselte Verbindung gesendet werden. Die SSL-verschlüsselte Verbindung muss zwischen dem Browser und dem Server hergestellt werden, bevor der Browser die HTTP-Anfrage sendet.

Https-Anfragen sind in Wirklichkeit HTTP-Anfragen, die über eine SSL-verschlüsselte Verbindung gesendet werden. Wenn der Server die Einrichtung einer SSL-verschlüsselten Verbindung ablehnt, hat der Browser keine Verbindung zum Senden der Anfrage. Der Browser und der Server haben keine Möglichkeit miteinander zu sprechen. Der Browser kann die URL, auf die er zugreifen möchte, nicht senden, und der Server kann nicht mit einer Weiterleitung auf eine andere URL antworten.

Das ist also nicht möglich. Wenn Sie auf https-Links antworten möchten, benötigen Sie ein SSL-Zertifikat.

5

können Sie die folgende Regel verwenden, um von https zu http zu umleiten:

RewriteEngine On 


RewriteCond %{HTTPS} ^on$ 
RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R] 

Erläuterung:

Prüft, ob das HTTPS auf (Request ist erfolgt über https)

Dann

RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R] 

jede Anfrage Redirect (https://example.com/foo) zuhttp://example.com/foo.

  • $ 1 ist Teil der Regex in RewriteRule Mustern, es enthält, was Wert erfaßt wurde (. +), in diesem Fall fängt es das volle request_uri alles nach dem Domain-Namen.

  • [NC, L, R] sind die Flags, NC macht den URI-Fall senstive, Sie können sowohl Groß- als auch Kleinbuchstaben in der Anfrage verwenden.

L-Flag teilt den Server verarbeitend andere Regeln zu stoppen, wenn die currunt Regel übereinstimmt, ist es wichtig, das L-Flag zu verwenden Regel confliction zu vermeiden, wenn Sie dann auf Regeln in einem Block haben.

R-Flag wird verwendet, um eine externe Umleitung vorzunehmen.

0
RewriteCond %{HTTP:X-Forwarded-Proto} =https 
+0

das hilft mir sehr. –

0

Ihr Code ist korrekt. legte sie gerade innerhalb der <VirtualHost *:443>

Beispiel:

<VirtualHost *:443> 
    SSLEnable 

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

</VirtualHost> 
Verwandte Themen