Zur Navigation

Alles auf https mit zwei Ausnahmen

1 efendi (Gast)

Hallo,

damit leite ich alle Anfragen auf https um, was bisher funktioniert.

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Jedoch habe ich zwei Seiten, die ich auf http belassen möchte, beispielsweise:

/nc/seite.html
/service/seite.html

Mit den im Netz gefunden Lösungen komme ich leider nicht weiter, lande oft in redirect-Schleifen. Hat jemand eine Idee für ich?

Bei erfolgreicher Hilfe ist ein virtuelles Bier drin :-)


Beste Grüße

03.09.2017 12:08

2 Jörg

Am sichersten ist die Überprüfung von THE_REQUEST zum Ausschluss der Weiterleitungen, da diese Variable im Gegensatz zu REQUEST_URI nicht durch andere Regeln verändert wird.

RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} !\ /nc/seite\.html
RewriteCond %{THE_REQUEST} !\ /service/seite\.html
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{THE_REQUEST} !\ /nc/seite\.html
RewriteCond %{THE_REQUEST} !\ /service/seite\.html
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

03.09.2017 12:48 | geändert: 03.09.2017 12:55

3 efendi (Gast)

Hallo, Jörg,

vielen Dank für deine Hilfe, jedoch führt dein Ansatz zu einem "internal error".
Ich habe deinen Block kopiert und lediglich die URLs ausgetauscht. Hätte ich noch etwas beachten müssen?

Bei vielen anderen Beispielen im Netz sehe ich zwei Blöcke:

RewriteCond %{HTTPS} off
und
RewriteCond %{HTTPS} on

Bei dir nur einen HTTPS off



Beste Grüße

03.09.2017 12:57

4 Jörg

Zitat von efendi
jedoch führt dein Ansatz zu einem "internal error".
Ich habe deinen Block kopiert und lediglich die URLs ausgetauscht. Hätte ich noch etwas beachten müssen?

Vor oder nach meiner Änderung? ich habe meinen Beitrag noch editiert und das Leerzeichen zwischen "!" und Backslash entfernt.

Bei vielen anderen Beispielen im Netz sehe ich zwei Blöcke:

RewriteCond %{HTTPS} off
und
RewriteCond %{HTTPS} on

Bei dir nur einen HTTPS off

Ja, ich habe deinen vorhandenen Code erweitert. Wozu benötigst du die zweite Bedingung - möchtest du die beiden Seiten ggf. auf die http URL weiterleiten? du hattest nur geschrieben, dass du die beiden Seiten "belassen", also eine Weiterleitung auf https verhindern möchtest. Eine Weiterleitung in umgekehrte Richtung wäre da noch eine zusätzliche Anforderung :)

03.09.2017 13:10

5 efendi (Gast)

Vor oder nach meiner Änderung? ich habe meinen Beitrag noch editiert und das Leerzeichen zwischen "!" und Backslash entfernt.

natürlich davor, ich war wohl zu schnell. Jetzt habe ich kein "internal error" mehr und ja ...

möchtest du die beiden Seiten ggf. auf die http URL weiterleiten?

... ich hätte gerne beide Ausnahmeseite mit einem http-Aufruf. Ob man diese jetzt belässt oder noch mal weiterleitet, entzieht sich meinen technischen Kenntnissen.

Vielleicht noch mal kurz zusammengefasst: Alles https, nur die zwei Seiten http.


Eine Weiterleitung in umgekehrte Richtung wäre da noch eine zusätzliche Anforderung

Wenn das zwei Bier bedeutet, von mir aus :-)
(Im Ernst, ich kann gerne via Paypal zusenden, das ist nicht das Problem. Nur das Problem sollte gelöst sein)

03.09.2017 13:33

6 Jörg

ich hätte gerne beide Ausnahmeseite mit einem http-Aufruf. Ob man diese jetzt belässt oder noch mal weiterleitet, entzieht sich meinen technischen Kenntnissen.

Das hat mit technischen Kenntnissen eigentlich nichts zu tun :) Das sind halt zwei Anforderungen:

1. http://example.vom/nc/seite.html nicht (mit den bereits vorhandenen Regeln) weiterleiten nach https://example.vom/nc/seite.html

2. https://example.vom/nc/seite.html (durch zusätzliche Regeln) weiterleiten nach http://example.vom/nc/seite.html

Der zweiten Punkt, also die Weiterleitungen nach http ließe sich so realisieren:

RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} \ /nc/seite\.html [OR]
RewriteCond %{THE_REQUEST} \ /service/seite\.html
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{THE_REQUEST} \ /nc/seite\.html [OR]
RewriteCond %{THE_REQUEST} \ /service/seite\.html
RewriteRule .* http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Da die Bedingungen hier zutreffen sollen, wird das negierende ! weggelassen. Dafür werden die beiden Bedingungen mit [OR] verknüpft

03.09.2017 13:57 | geändert: 03.09.2017 14:01

7 efendi (Gast)

Vielen Dank für deine Mühen, Jörg, aber irgendwie ist der Wurm drin :-)

Ich versuche zu beschreiben, wie es sich nun mit deinen zwei Blöcken verhält.

Rufe ich example.com auf, ohne www, ohne https, bleibt alles wie es ist. Die weiteren Links verhalten sich dementsprechen:
example.com/technik.html
example.com/software.html

und so weiter. And dieser Stelle sollte aber eine Weiterleitung an https://www .... erfolgen.
Bis auf die zwei Ausnahmen soll alles an https://www weitergeleitet werden, die zwei Ausnahmen an http://www

Weiterhin kurios: Rufe ich die Seite mit https://example.com auf und klicke eine der Ausnahmeseiten an, erscheint Fehler: Umleitungsfehler



Vielleicht liegt es an meiner Beschreibung, aber besser kann ich mein Anliegen leider nicht darstellen ...

Beste Grüße






03.09.2017 14:26

8 Jörg

Zitat von efendi
Rufe ich example.com auf, ohne www, ohne https, bleibt alles wie es ist. Die weiteren Links verhalten sich dementsprechen:
example.com/technik.html
example.com/software.html

und so weiter. And dieser Stelle sollte aber eine Weiterleitung an https://www .... erfolgen.
Bis auf die zwei Ausnahmen soll alles an https://www weitergeleitet werden,

Dafür sollte der Code in Beitrag 2 sorgen. Den hast du jetzt aber nicht entsorgt oder geändert? der sollte schon so bleiben

die zwei Ausnahmen an http://www

Dafür sollte der (zusätzliche) Code in Beitrag 6 sorgen.

Weiterhin kurios: Rufe ich die Seite mit https://example.com auf und klicke eine der Ausnahmeseiten an, erscheint Fehler: Umleitungsfehler

Leer mal bitte vor jedem Test den Browser-Cache. Browser merken sich nämlich 301-Weiterleitungen (was eigentlich auch sinnvoll ist, beim Testen aber kontraproduktiv)

Edit:

falls noch weiterer mod_rewrite Code in der .htaccess Datei enthalten ist:

die Weiterleitungen aus Beitrag 2 und 6 sollten ganz weit oben stehen

03.09.2017 14:40 | geändert: 03.09.2017 14:44

9 efendi (Gast)

Hi Jörg,

klar, den Cache lösche ich vor jedem Testen, der Browser wird auch wieder neugestartet, es werden auch verschiedene Browser getestet, soweit alles klar.

Das ist also der komplette Code, richtig verstanden?

RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} !\ /nc/seite\.html
RewriteCond %{THE_REQUEST} !\ /service/seite\.html
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{THE_REQUEST} !\ /nc/seite\.html
RewriteCond %{THE_REQUEST} !\ /service/seite\.html
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} \ /nc/seite\.html [OR]
RewriteCond %{THE_REQUEST} \ /service/seite\.html
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{THE_REQUEST} \ /nc/seite\.html [OR]
RewriteCond %{THE_REQUEST} \ /service/seite\.html
RewriteRule .* http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Wenn nicht, würde ich mich frecherweise um einen kompletten (hoffentlich funktionieren Code) freuen. Ich erhöhe auf drei Bier ;)

03.09.2017 16:31

10 Jörg

Am Anfang muss die RewriteEngine noch eingeschaltet werden:

RewriteEngine on

Da du oben geschrieben hast, dass der Ausgangs-Code funktioniert, bin ich davon ausgegangen, dass du die Zeile schon drin hast :)

Ich habe den Code mal bei mir getestet, hier funktioniert er soweit.

Das schließt natürlich nicht aus, dass weiterer Code in der .htaccess Datei oder .htaccess Code aus darüberliegenden Verzeichnissen noch dazwischen grätscht oder dass besondere Einstellungen des Webhosters Probleme bereiten. In dem Fall wäre es gut, wenn du mal den gesamten Code aller relevanten .htaccess Dateien postest.

Darüber hinaus könnte noch ein CMS mit eigenen Weiterleitungen Ursache für Fehl- und Endlos-Weiterleitungen sein (wobei die Endung .html hier ja eher auf statische Seiten hindeuten)

03.09.2017 17:14