oxo888oxo: www und http auf "nur" https umleiten

Hallo

Ich möchte gerne meine gesamte Website auf https umleiten.

Umgeleitet werden sollen:

  • http://example.org
  • http://www.example.org
  • https://www.example.org

Auf:

  • https://example.org

Bisher habe ich in meiner .htaccess-Datei dazu folgendes:

RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^(.*)$ https://example.org/$1 [R=301,L]

Das leitet aber leider noch nicht https://www.example.org auf https://example.org um. Könnt Ihr mir helfen, das hinzubekommen?

Gruß Ingo

  1. Tach!

    RewriteCond %{SERVER_PORT} !=443

    Man kann auch %{HTTPS} auf den Inhalt on beziehungsweise ungleich on prüfen.

    Das leitet aber leider noch nicht https://www.example.org auf https://example.org um. Könnt Ihr mir helfen, das hinzubekommen?

    Man kann das vermutlich erweitern, aber dann wird es unnötig komplex. Ich würde da eine zweite Regel erstellen, die als Bedingungen auf HTTPS prüft und ob der Host mit www anfängt.

    dedlfix.

    1. Man kann das vermutlich erweitern, aber dann wird es unnötig komplex. Ich würde da eine zweite Regel erstellen, die als Bedingungen auf HTTPS prüft und ob der Host mit www anfängt.

      Da ich selbst leider nicht weis, wie man das macht, habe ich nun noch mal gegoogelt. Dabei habe ich das hier gefunden:

      RewriteEngine On
      RewriteBase /
      RewriteCond %{HTTP_HOST} !^example\.org$ [NC,OR]
      RewriteCond %{HTTPS} =off
      RewriteRule ^(.*)$ https://example.org/$1 [R=301,L]
      

      Ist das so korrekt?

      Ich sehe darin ja nun nicht mehr den Teil mit diesem "!=443". Ich hatte irgendwo gelesen, dass das eine Endlosschleife verhindert. Aber so richtig verstanden habe ich das ehrlich gesagt nicht.

      1. Tach!

        Ist das so korrekt?

        Ja, so geht das auch und ich seh da auf den ersten Blick keinen Fehler.

        Ich sehe darin ja nun nicht mehr den Teil mit diesem "!=443". Ich hatte irgendwo gelesen, dass das eine Endlosschleife verhindert. Aber so richtig verstanden habe ich das ehrlich gesagt nicht.

        Kann ich mir nicht vorstellen, dass das endlosschleift. Hast du da einen Verweis auf die Quelle dieses Wissens?

        dedlfix.

  2. Ich möchte gerne meine gesamte Website auf https umleiten.

    Durch Senden der Kopfzeile Strict-Transport-Security (siehe https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security ) kannst du Browser veranlassen, automatisch auf https umzuschalten, ohne ausdrückliche Weiterleitung.

  3. Moin!

    RewriteEngine On
    RewriteCond %{SERVER_PORT} !=443 [OR]
    RewriteCond %{HTTP_HOST} ^www\.example\.org
    RewriteRule ^(.*)$ https://example.org/$1 [R=301,L]
    

    Deutsch:

    wenn rewrite-condition 1 erfüllt ist [ODER]
    wenn rewrite-condition 2 erfüllt ist,
    dann führe die Rewrite-Anweisung aus.
    

    Ohne [or]:

    wenn rewrite-condition 1 erfüllt ist (nicht erwähntes:) UND
    wenn rewrite-condition 2 erfüllt ist,
    dann führe die Rewrite-Anweisung aus.
    

    Handbuch: You can also set special flags for CondPattern by appending [flags] as the third argument to the RewriteCond directive, ... 'ornext|OR' (or next condition): Use this to combine rule conditions with a local OR instead of the implicit AND.

    Jörg Reinholz

    1. Hallo

      RewriteEngine On
      RewriteCond %{SERVER_PORT} !=443 [OR]
      RewriteCond %{HTTP_HOST} ^www\.example\.org
      RewriteRule ^(.*)$ https://example.org/$1 [R=301,L]
      

      Der Code schaut doch schön aus :-) Und funktionieren tut er natürlich auch.

      Hat er denn einen Vorteil gegenüber dem hier? Oder ist es im Grunde egal, welche der beiden Varianten ich verwende?

      RewriteEngine On
      RewriteCond %{HTTP_HOST} !^example\.org$ [NC,OR]
      RewriteCond %{HTTPS} =off
      RewriteRule ^(.*)$ https://example.org/$1 [R=301,L]
      
      1. Tach!

        Hat er denn einen Vorteil gegenüber dem hier? Oder ist es im Grunde egal, welche der beiden Varianten ich verwende?

        Nein, ja, macht beides dasselbe.

        dedlfix.

        1. OK prima. Ich danke Dir. Ich nehme die obere Variante, die schaut "schöner" aus :-)

      2. Moin!

        Hat er denn einen Vorteil gegenüber dem hier?

        Das kommt auf die genaue Problemstellung an.

        Einmal wird geprüft, ob etwa nicht der Port 443 benutzt wird, der bei https der Standardport ist, aber nicht in jedem Fall der verwendete sein muss - z.B. wenn der in VM-Ware integrierte Server den Port belegt und es gewollt ist, dass das so bleibt. Sobald also ein anderer Port als 443 für den Apache-Webserver benutzt wird, ist das also falsch. Ebenso ist es falsch, wenn der Webserver so konfiguriert ist, dass auf Port 443 der unverschlüsselte Webserver lauscht - aber das ist eine sehr theoretische Konstellation und also ein "eher akademischer" Aspekt.

        In der zweiten Variante wird geprüft, ob der Host nicht "example.org" ist. Wenn Du z.B. nur Zugriffe auf "http[s]://www.example.org" aber nicht "http[s]://mail.example.org" zu "https://example.org" weiterleiten willst, dann ist das falsch. Dieser Aspekt ist deutlich weniger akademisch als man zunächst denken mag.

        Oder ist es im Grunde egal, welche der beiden Varianten ich verwende?

        Im Ergebnis ist es unter den genannten Bedingungen egal.

        Jörg Reinholz