Support » Installation » Bitte um Durchsicht meiner htaccess Datei

  • Gelöst winterstern

    (@winterstern)


    Moin,

    ich könnte einmal etwas Hilfe gebrauchen. So hab ich mein Internetblog mit viel Mühe selber auf HTPPS umgestellt. Vor kurzem war es aber noch so, daß die Seite 25u.de erst Mal unverschlüsselt ausgeliefert wurde. Wenn man nach dem ersten Aufruf auf irgend einen Blog Artikel geclickt hat war dieser aber verschlüsselt. 80% Sieg.

    Ich hab in WordPress keine Möglichkeit gefunden, das irgendwie zu beeinflussen. Es ist überhaupt ziemlich deprimierend, wie kompliziert so ein Blog für ganz normale Leute ohne technischen (programmiertechnischen) Hintergrund zu betreiben ist …

    Aktuell sieht meine htaccess Datei so aus:

    # BEGIN WordPress
    # Die Anweisungen (Zeilen) zwischen „BEGIN WordPress“ und „END WordPress“ sind
    # dynamisch generiert und sollten nur über WordPress-Filter geändert werden.
    # Alle Änderungen an den Anweisungen zwischen diesen Markierungen werden überschrieben.
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    
    RewriteEngine On
    RewriteCond %{Server_Port} !=443
    RewriteRule ^(.*)$ https://25u.de/$1 [R=301,L]
    <IfModule>
    
    # END WordPress
    

    Der untere Block ist neu. Der hat bewirkt, daß 25u.de sofort auf https://25u.de umschaltet. Wahrscheinlich hätte der untere Block ganz nach unten gemusst, unter dieses END WordPress. Denn jetzt ist folgendes passiert: Ich hab Nachts meine Seite editiert, plötzlich war diese offline und es kam nur eine Strato applocked Fehler Meldungs Seite. Am nächsten Tag (nicht wie versprochen nach wenigen Minuten) war mein Internetblog wieder da, allerdings wieder unverschlüsselt. Also htacess wieder hochgeladen und siehe da, repariert.

    Meine Bitte wäre nun, sich meine htaccess Datei Mal anzuschauen. Wie sollte die aussehen ? Was ist dort unnötig ? Welche zeilen kann ich löschen ? Muss was dazu ?

    Bevor ich hier weiter herum murkse. Das ist ja vermutlich alles nicht für Narrenhände bestimmt.

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 22)
  • Die Umstellung einer Website von unverschlüsselter Übertragung per http auf https ist inzwischen eigentlich recht simpel: Du brauchst nur unter Werkzeuge > Website-Zustand der Anleitung zu folgen.

    Bevor es diese Möglichkeit gab, war die Einstellung etwas komplizierter: Nachdem ein SSL-Zertifikat eingerichtet wurde, musst unter Einstellungen > Allgemein die beiden URLs auf https geändert werden. Zusätzlich war eine Ersetzung in allen Datenbank-Tabellen notwendig, damit die Website keine gemischten Inhalte überträgt. Das lässt sich mit dem hier im Forum oft empfohlenen Plugin Better Search Replace leicht umsetzen.

    Ganz unabhängig davon ist es sinnvoll, eine Weiterleitung einzurichten, die alle Besucher, die eine URL mit http aufrufen, automatisch auf eine verschlüsselte Webseite umleiten. Wer seine Website ohne die Subdomain www betreibt, möchte auch gerne Besucher auf eine URL umleiten, die kein www enthält. Beides lässt sich durch eine Weiterleitungsregel in der .htaccess einrichten, z.B. …

    RewriteEngine on
    
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
    
    RewriteCond %{ENV:HTTPS} !on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    Diese Zeilen müssen oberhalb des von WordPress eingefügten Code-Blocks eingefügt werden. Dieser Block, der mit # BEGIN WordPress anfängt und mit # END WordPress endet, sorgt dafür, dass jeder Seiteaufruf an die index.php weitergeleitet wird, um dann Skripte auszuführen, die den Seitenaufruf in den richtigen Aufruf in der MySQL-Datenbank umwandeln. Unter diesem Block eingetragene Zeilen werden ggf. inoriert, weil die Seite schon angezeigt wird.

    Zusätzlich sind oberhalb des von WordPress eingetragenen Code-Block noch ein paar Regeln sinnvoll (aber für den Betrieb nicht zwingend erforderlich), um die Sicherheit der Website zu verbessern. Mit

    <FilesMatch "^.*(error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$">
    Order deny,allow
    Deny from all
    </FilesMatch>

    lässt sich z.B. der Zugriff auf die Konfigurationsdatei wp-config.php (in der die Zugangsdaten zur MySQL-Datenbank stehen!) zusätzlich absichern. Auch der Browser-Zugriff auf Error-Logs, PHP-Konfiguration und die .htaccess selber wird erschwert.

    Mit

    <files readme.txt>
    order allow,deny
    deny from all
    </files>
    <files readme.html>
    order allow,deny
    deny from all
    </files>

    wird zusätzlich der Zugriff auf Readme-Dateien unterbunden, aus denen Angreifer die Versionsnummer von Plugins auslesen könnten.

    Die XMLRPC-Schnittstelle, über die mit Software von Drittanbietern auf WordPress zugegriffen werden kann, wird gerne für Angriffe genutzt. Wenn du keinen externen Editor verwendest, um Beiträge zu schreiben, solltest du den Zugriff ebenfalls sperren:

    <Files xmlrpc.php>
    Order Deny,Allow
    Deny from all
    </Files>

    Zur Verbesserung der Performance können in der .htaccess Vorgaben gemacht werden, ab im Browser-Cache Dokumente neu geladen werden sollen („Expires“) und welche Dateien komprimiert übertragen werden sollen („mod_deflate“). Diese Einträge werden allerding üblicherweise von einem Cache-Plugin eingetragen und du brauchst nichts selber hinzufügen. Allerdings kannst du das nach der Installation eines Cache-Plugins selber prüfen und ggf. nachtragen, z.B.

    # Serve resources with far-future expires headers.
    #
    # (!) If you don't control versioning with filename-based
    # cache busting, you should consider lowering the cache times
    # to something like one week.
    #
    # https://httpd.apache.org/docs/current/mod/mod_expires.html
    
    <IfModule mod_expires.c>
        ExpiresActive on
        ExpiresDefault                                      "access plus 1 month"
    
      # CSS
        ExpiresByType text/css                              "access plus 1 year"
    
      # Data interchange
        ExpiresByType application/atom+xml                  "access plus 1 hour"
        ExpiresByType application/rdf+xml                   "access plus 1 hour"
        ExpiresByType application/rss+xml                   "access plus 1 hour"
    
        ExpiresByType application/json                      "access plus 0 seconds"
        ExpiresByType application/ld+json                   "access plus 0 seconds"
        ExpiresByType application/schema+json               "access plus 0 seconds"
        ExpiresByType application/vnd.geo+json              "access plus 0 seconds"
        ExpiresByType application/xml                       "access plus 0 seconds"
        ExpiresByType text/xml                              "access plus 0 seconds"
    
      # Favicon (cannot be renamed!) and cursor images
        ExpiresByType image/vnd.microsoft.icon              "access plus 1 week"
        ExpiresByType image/x-icon                          "access plus 1 week"
    
      # HTML - Behält die Website eine Stunde im Cache, neues wird erst nach Ablauf einer Stunde
      # angezeigt. Wenn nicht gewuenscht, bei 3600 eine Null eintragen
        ExpiresByType text/html                             "access plus 0 seconds"
    
      # JavaScript
        ExpiresByType application/javascript                "access plus 1 year"
        ExpiresByType application/x-javascript              "access plus 1 year"
        ExpiresByType text/javascript                       "access plus 1 year"
    
      # Manifest files
        ExpiresByType application/manifest+json             "access plus 1 week"
        ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
        ExpiresByType text/cache-manifest                   "access plus 0 seconds"
    
      # Media files
        ExpiresByType audio/ogg                             "access plus 1 year"
        ExpiresByType image/bmp                             "access plus 1 year"
        ExpiresByType image/gif                             "access plus 1 year"
        ExpiresByType image/jpeg                            "access plus 1 year"
        ExpiresByType image/png                             "access plus 1 year"
        ExpiresByType image/svg+xml                         "access plus 1 year"
        ExpiresByType image/webp                            "access plus 1 year"
        ExpiresByType video/mp4                             "access plus 1 year"
        ExpiresByType video/ogg                             "access plus 1 year"
        ExpiresByType video/webm                            "access plus 1 year"
    
      # Web fonts
    
        # Embedded OpenType (EOT)
        ExpiresByType application/vnd.ms-fontobject         "access plus 1 year"
        ExpiresByType font/eot                              "access plus 1 year"
    
        # OpenType
        ExpiresByType font/opentype                         "access plus 1 year"
    
        # TrueType
        ExpiresByType application/x-font-ttf                "access plus 1 year"
    
        # Web Open Font Format (WOFF) 1.0
        ExpiresByType application/font-woff                 "access plus 1 year"
        ExpiresByType application/x-font-woff               "access plus 1 year"
        ExpiresByType font/woff                             "access plus 1 year"
    
        # Web Open Font Format (WOFF) 2.0
        ExpiresByType application/font-woff2                "access plus 1 year"
    
      # Other
        ExpiresByType text/x-cross-domain-policy            "access plus 1 week"
    </IfModule>
    
    <IfModule mod_deflate.c>
    # Insert filters / compress text, html, javascript, css, xml:
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE text/vtt 
    AddOutputFilterByType DEFLATE text/x-component
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/js
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE application/x-httpd-php
    AddOutputFilterByType DEFLATE application/x-httpd-fastphp
    AddOutputFilterByType DEFLATE application/atom+xml 
    AddOutputFilterByType DEFLATE application/json
    AddOutputFilterByType DEFLATE application/ld+json 
    AddOutputFilterByType DEFLATE application/vnd.ms-fontobject 
    AddOutputFilterByType DEFLATE application/x-font-ttf
    AddOutputFilterByType DEFLATE application/font-woff2
    AddOutputFilterByType DEFLATE application/x-font-woff
    AddOutputFilterByType DEFLATE application/x-web-app-manifest+json font/woff
    AddOutputFilterByType DEFLATE font/woff 
    AddOutputFilterByType DEFLATE font/opentype
    AddOutputFilterByType DEFLATE image/svg+xml
    AddOutputFilterByType DEFLATE image/x-icon 
    
    # Exception: Images
    SetEnvIfNoCase REQUEST_URI \.(?:gif|jpg|jpeg|png|svg)$ no-gzip dont-vary
    
    # Drop problematic browsers
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
    
    # Make sure proxies don't deliver the wrong content
    Header append Vary User-Agent env=!dont-vary
    </IfModule>
    
    #Alternative caching using Apache's "mod_headers", if it's installed.
    #Caching of common files - ENABLED
    <IfModule mod_headers.c>
    <FilesMatch "\.(ico|pdf|flv|swf|js|css|gif|png|jpg|jpeg|txt|woff2|woff)$">
    Header set Cache-Control "max-age=31536000, public"
    </FilesMatch>
    </IfModule>
    
    <IfModule mod_headers.c>
      <FilesMatch "\.(js|css|xml|gz)$">
        Header append Vary Accept-Encoding
      </FilesMatch>
    </IfModule>
    
    # Set Keep Alive Header
    <IfModule mod_headers.c>
        Header set Connection keep-alive
    </IfModule>
    
    # If your server don't support ETags deactivate with "None" (and remove header)
    <IfModule mod_expires.c> 
      <IfModule mod_headers.c> 
        Header unset ETag 
      </IfModule> 
      FileETag None 
    </IfModule>
    
    <IfModule mod_headers.c>
    <FilesMatch ".(js|css|xml|gz|html|woff|woff2|ttf)$">
    Header append Vary: Accept-Encoding
    </FilesMatch>
    </IfModule>

    Wir bekommen hier öfters Fragen von WordPress-Anwendern, die ihre Website- und WordPress-URL auf https umgestellt haben, ohne vorher ein SSL-Zertifikat eingerichtet zu haben. Das führt dann zu Problemen, die sich ein wenig umständlicher lösen lassen, in dem der Eintrag in der Datenbank korrigiert wirdf (Tabelle wp_options) oder nachträglich ein SSL-Zertfikat eingerichtet wird.

    Es gibt viele Beiträge im Web, die sich mit möglichen Einträgen in der .htaccess befassen und nicht selten eine recht lange .htaccess-Datei zur Folge haben (z.B. WordPress htaccess: perfekt für PageSpeed und Sicherheit – hier stammt auch das zuletzt aufgeführte Code-Snippet her, Complete list of .htaccess snippets to improve WordPress security). Unter Umständen kann eine per Coipy/Paste gepimpte .htaccess zu einem „500 – Internal Server Error“ führen, weil sich die Konfiguration des Webservers mit der .htaccess beißt. Das lässt sich aber schnell beheben, wenn die Datei per FTP korrigiert werden kann. Hier löscht man zunächst alle zuletzt eingefügten Einträge in der .htaccess und fügt sie dann einzeln ein, um im Ausschlußprinzip zu testen, welche Regel sich nicht mit der Serverkonfiguration verträgt.

    Thread-Starter winterstern

    (@winterstern)

    Bego, danke erst Mal für deine ausführlich Antwort.

    Das SSL Zertifikat hatte ich zuerst installiert, das hat auch soweit funktioniert und auf Wunsch wurde die webseite verschlüsselt ausgeliefert. Aber der Aufruf von 25u.de war nach wie vor unverschlüsselt.

    Der Anleitung folgen hat meiner Erinnerung nach damals auch schon nicht funktioniert. Ich hatte es eigentlich erwartet, denn ich bin ja nicht der einzige der den Wunsch hat seine Seite auf HTTPS umzustellen. HTTPS ja, aber nur, wenn man HTTPS eintippt.

    Ich hab jetzt Mal deine Zeilen oberhalb vom Block angefügt, das hat dazu geführt daß die Seite gar nicht mehr geladen wird.

    Es kommt dann ein too many request error.

    Also, was mir sehr helfen würde wäre jemand, der sich die Datai unten Mal anschaut und das umprogrammiert. Mit Trial and Error irgendwas einfügen, ich denke, das Ergebnis ist einfach zu sehr vom Zufall abhängig.

    FRAGE 1: welche Zeilen muss ich einfügen, damit der Aufruf von 25u.de oder http://www.25u.de automatisch (zum Beispiel bei Leuten mit einem Handy, die kein https:// eintippen können, sondern nur 25u.de ) verschlüsselt ausgeliefert wird ?

    FRAGE 2: welche Zeilen müssen eventuell gelöscht werden weil was doppelt ist ?

    Ich mein, da steht ja nun an mehreren Stellen was mit HTTPS oder request oder was weis ich was das macht. Da unten im schmierigen Betriebsraum von diesem Ding.

    ———————————– hat zu to many requests geführt ——————-

    
    RewriteEngine on
    
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
    
    RewriteCond %{ENV:HTTPS} !on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
    # BEGIN WordPress
    # Die Anweisungen (Zeilen) zwischen „BEGIN WordPress“ und „END WordPress“ sind
    # dynamisch generiert und sollten nur über WordPress-Filter geändert werden.
    # Alle Änderungen an den Anweisungen zwischen diesen Markierungen werden überschrieben.
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    # END WordPress
    

    Du könntest mal im Control-Panel deines Webspaces nachsehen, ob du das nicht dort einstellen kannst. Bei Plesk ist das z.B. kein Problem.

    Thread-Starter winterstern

    (@winterstern)

    Bei mir ist das Strato. Plesk oder so seh ich da nicht. Am Provider kann es meiner Meinung nach auch nicht liegen. Da ist irgend was falsch da oben mit den hinzugefügten Zeilen. Offensichtlich. Denn dann gehts ja nicht mehr.

    Als Nachtrag: tips zur Performance Verbesserung brauch ich nicht, auch wenn das sicherlich lieb gemeint ist und vielleicht Mal jemanden hilft.

    • Diese Antwort wurde geändert vor 1 Monat, 2 Wochen von winterstern.
    • Diese Antwort wurde geändert vor 1 Monat, 2 Wochen von winterstern.

    Was hat das mit Performance zu tun? In Plesk kann ich einstellen, dass die Domain immer auf https umgeleitet wird, und darum geht es doch! Und soweit ich weiß, kann das nicht nur Plesk, somit hättest du das Gehampel mit der htaccess nicht.

    Strato hat doch eigentlich Plesk zur Domain-Verwaltung.

    Thread-Starter winterstern

    (@winterstern)

    Ich guck mir das heut Abend an ! Fahr nun erst Mal wieder ne Runde LKW, offroad, um runter zu kommen von diesem webseiten Stress.

    welche Zeilen muss ich einfügen, damit der Aufruf von 25u.de oder http://www.25u.de automatisch (zum Beispiel bei Leuten mit einem Handy, die kein https:// eintippen können, sondern nur 25u.de ) verschlüsselt ausgeliefert wird ?

    RewriteEngine on
    
    RewriteCond %{ENV:HTTPS} !on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    FRAGE 2: welche Zeilen müssen eventuell gelöscht werden weil was doppelt ist ?

    <IfModule mod_rewrite.c>
    RewriteEngine On
    ❌ RewriteCond %{HTTPS} !=on
    ❌ ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteBase /

    Die mit ❌ markierten Zeilen gehören da nicht hin.

    Thread-Starter winterstern

    (@winterstern)

    Nee sorry da kommt dann:

    This page isn’t working25u.de redirected you too many times.
    Try clearing your cookies.
    ERR_TOO_MANY_REDIRECTS

    Datei Inhalt, umgebaut:

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

    RewriteCond %{ENV:HTTPS} !on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    # BEGIN WordPress
    # Die Anweisungen (Zeilen) zwischen „BEGIN WordPress“ und „END WordPress“ sind
    # dynamisch generiert und sollten nur über WordPress-Filter geändert werden.
    # Alle Änderungen an den Anweisungen zwischen diesen Markierungen werden überschrieben.
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress

    Thread-Starter winterstern

    (@winterstern)

    Ich hab mich gerade auf die Suche nach Plesk begeben. Das ist etwas, wenn man einen Server gekauft hat.

    https://www.strato.de/faq/server/erste-schritte-mit-plesk/

    Bei mir wird das unter strato nicht angezeigt.

    Irgend ein Control-Panel wirst du doch bei deinem Webspace haben. Wo kannst du z.B. die PHP-Version einstellen?

    Thread-Starter winterstern

    (@winterstern)

    Wenn ich mich bei Strato einlogg ist da links ein Kasten mit WP Starter. Da kann man dann ihr Paket, Domains, EMail und so weiter auswählen. Unter Datenbank ist dann PHP einstellen, bei mir 8.

    Nix mit Plesk, das scheint wie schon gesagt dafür zu sein, wenn man dort einen Hardware Server hat.

    Ich hab jetzt gerade Mal Strato angeschrieben, vielleicht haben die ja noch eine Idee, was da zu ändern ist ohne daß man immer gleich alles zerschiesst. Falls mir strato helfen kann, poste ich die Lösung dann hier.

    Du hast vermutlich ein WordPress-Paket bei Strato, da kann das sein, dass du nicht viel einstellen kannst. Schade, ansonsten wäre die Lösung einfach gewesen.

    Thread-Starter winterstern

    (@winterstern)

    Korrekt, allerdings ist es mit 4 Euro pro Monat (48 Euro im Jahr) spektakulär günstig und es macht seit zwei Jahren Zeit genau das, was es soll. Mehr Funktionen als Blog + eMail benötige ich nicht.

    Keine, der sich der Datai da oben nochmal annehmen will ? So wie es da oben steht und vorgeschlagen wurde geht es nicht. Fehlermeldung.

    Korrekt, allerdings ist es mit 4 Euro pro Monat (48 Euro im Jahr) spektakulär günstig

    Der Preis ist nicht spektakulär. Auch andere Hoster können dir so ein (sogar leistungsfähigeres) Paket zu dem Preis anbieten.

    Keine, der sich der Datai da oben nochmal annehmen will ? So wie es da oben steht und vorgeschlagen wurde geht es nicht. Fehlermeldung.

    Bitte kein Bumping (siehe FAQ) – wenn hier sich niemand dazu geäußert hat, dann liegt es in der Regel daran, dass niemand z. Zt. noch etwas zu dem Problem beisteuern kann.
    An sich sollten die genannten Antworten reichen, um das Problem zu beheben.

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 22)
  • Das Thema „Bitte um Durchsicht meiner htaccess Datei“ ist für neue Antworten geschlossen.