HTTP zu HTTP-Umleitung mit htaccess

72

Ich versuche, https://www.example.com auf http://www.example.com umzuleiten . Ich habe den folgenden Code in der .htaccess-Datei ausprobiert

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

Dieser Code leitet https://example.com erfolgreich an http://www.example.com weiter . Wenn ich jedoch https://www.example.com eingebe, wird im Browser der Fehler "Webseite nicht verfügbar" angezeigt.

Ich habe auch die folgenden 2 Codes ohne Erfolg ausprobiert

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 genannten Versuche schlugen fehl. Irgendwelche Vorschläge?

Ansh
quelle

Antworten:

113

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

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Arkascha
quelle
9
Wird gut zu verwenden sein, R=302wenn Sie nicht dauerhaft machen möchten . Dies brachte mich in Schwierigkeiten, als mein SSL abgelaufen war und ich vorübergehend zurückkehren wollte, httpbevor ich die schmerzhaften Erneuerungsverfahren durchlief.
ProfNandaa
Schmerzhafte Erneuerung? Sollte entweder ein Umblättern von Zertifikatdateien oder eine einfache Skriptausführung sein ... Das Problem bei 302 ist, dass Clients es jedes Mal befolgen müssen, sodass Sie die Anzahl der Anforderungen für die Client- und Serverseite erhöhen.
Arkascha
@arkascha Ich wollte nur verstehen, dass die RewriteCond als if-Anweisung zum Schreiben fungiert. Ich meine nur dort, wo es https findet, wird es die nächste Umschreiberegel ausführen. Ich frage, da Google automatisch ein paar https-URLs in seinen Index aufgenommen hat, ohne dass wir sie von irgendwoher verlinken. Um jeden Fehler auszuschließen, verwenden wir den obigen Code, um alle https URL
Ankur Jain
Sie sind grundsätzlich richtig. Es ist sicherlich sinnvoll für Sie, einen Blick in die hervorragende Dokumentation zu werfen
Arkascha
Abgesehen davon: Google bevorzugt in der Tat SSL-Varianten von URLs, wenn es sie finden kann. Mit sehr guten Gründen. Ich sehe keinen Grund, warum Sie das verhindern wollen ...
Arkascha
39

Wenn Ihre Website jedoch nicht über ein Sicherheitszertifikat verfügt, sich in einer gemeinsam genutzten Hosting-Umgebung befindet und Sie keine "Warnung" erhalten möchten, wenn Ihre Website über https angefordert wird, können Sie sie nicht mit htaccess umleiten. Der Grund dafür ist, dass die Warnmeldung ausgelöst wird, bevor die Anforderung überhaupt in die htaccess-Datei eingeht, sodass Sie sie auf dem Server beheben müssen. 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-Anbieter Ihnen nicht so viel Kontrolle gibt. Sie müssten also entweder auf einen anderen Host wechseln oder das SSL kaufen, damit die Warnung nicht ausgelöst wird, bevor Ihr htaccess die Möglichkeit hat, umzuleiten.

Adela Ruffatti
quelle
2
Vielen Dank für diese Antwort. Da unsere vorhandene Site kein SSL-Zertifikat hat, funktioniert mein .htaccess nicht, egal wie korrekt er ist.
Marknt15
@arkascha Ich habe die verschiedenen hier geteilten Methoden ausprobiert, aber keine hat funktioniert. Ja, ich habe in einer gemeinsam genutzten Umgebung getestet. SSL ist nicht aktiv, obwohl ein freigegebenes SSL kostenlos ist. Der betreffende https-Link war historisch / wurde von einer zuvor SSL-fähigen Umgebung geerbt. Ich habe nichts gegen die Browser-Warnung (im Dev-Modus), aber ich brauchte zumindest die Umleitung, um zu geschehen. Kann jemand weitere Leads anbieten?
Pageii Studio
Gültige Antwort. Ich wollte IE9 wegen inkompatibler Sicherheitsprotokolle von https nach http umleiten (TLS 1.0 wird nicht mehr verwaltet). Aber was auch immer ich tat, es hat nicht funktioniert. Verursacht durch die Tatsache, dass das Sicherheitsprotokoll vor den .htaccess-Befehlen in Kraft tritt.
Frank Conijn
Ich fand heraus, dass der neue Microsoft Edge sogar auf einer gemeinsam genutzten Host-Site funktioniert. Firefox und Chrome geben weiterhin die Warnung aus, aber der neue Edge sieht die .htaccess-Informationen, bevor er zu einer Warnung umleitet. Der neue Edge-Browser mit der Chromium-Engine ist fantastisch!
DrupalFever
12

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

 RewriteEngine On


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

Erklärung:

RewriteCond %{HTTPS} ^on$

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

Dann

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

Leiten Sie jede Anfrage ( https://example.com/foo ) an http://example.com/foo weiter .

  • $ 1 ist Teil des regulären Ausdrucks im RewriteRule-Muster. Es enthält den Wert, der in (. +) Erfasst wurde. In diesem Fall erfasst es die vollständige request_uri alles nach dem Domänennamen.

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

Das L-Flag weist den Server an, die Verarbeitung anderer Regeln zu beenden, wenn die Currunt-Regel übereinstimmt. Es ist wichtig, das L-Flag zu verwenden, um Regelkonflikte zu vermeiden, wenn Sie mehr als nur Regeln in einem Block haben.

Das R-Flag wird verwendet, um eine externe Umleitung durchzuführen.

Amit Verma
quelle
10
RewriteEngine On
RewriteCond %{SERVER_PORT} 443
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Auero
quelle
4

Der Unterschied zwischen http und https besteht darin, dass https-Anforderungen ü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-Anforderung sendet.

HTTP-Anforderungen sind tatsächlich HTTP-Anforderungen, die über eine SSL-verschlüsselte Verbindung gesendet werden. Wenn der Server das Herstellen einer SSL-verschlüsselten Verbindung ablehnt, hat der Browser keine Verbindung zum Senden der Anforderung. Der Browser und der Server können nicht miteinander kommunizieren. 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.

drhema
quelle
2
RewriteCond %{HTTP:X-Forwarded-Proto} =https
Eric Michalsen
quelle
das hilft mir sehr.
Harry Matharoo
Diese Lösung funktionierte gut in einem bestimmten Server-Hosting (ergonet.it), wenn die anderen oben genannten den Fehler "Zu viele Weiterleitungen" verursachen, danke!
Lorenzo Magon
0

Ihr Code ist korrekt. Legen Sie sie einfach in die<VirtualHost *:443>

Beispiel:

<VirtualHost *:443>
  SSLEnable

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

</VirtualHost>
Hiro Itasiki
quelle