Ergebnis 1 bis 6 von 6
  1. #1
    Kunde
    Registriert seit
    23.02.2018
    Beiträge
    5

    htaccess überprüfen

    Hallo,

    Habe folgenden Code in meiner htaccess Datei in Verwendung für nicht-www auf www und http auf https Umleitung.
    Es funktioniert auch meiner Meinung nach einwandfrei. Da ich die Datei aber aus verschiedenen Quellen zusamengefügt habe und kein Wissen in diesem Bereich habe wäre es fein wenn ein Profi den Code kurz überprüfen könnte:

    Code:
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>
    
    <IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" "expr=%{HTTPS} == 'on'"
    </IfModule>
    
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>
    
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{THE_REQUEST} index\. [NC]
    RewriteRule ^(.*)index\.(.*) /$1 [L,NC,R=301]
    </IfModule>
    Danke & Grüße,
    Willi

  2. #2
    Forenexperte² (Reseller) Avatar von Enigma
    Registriert seit
    20.07.2001
    Beiträge
    18.464

    AW: htaccess überprüfen

    Zitat Zitat von williki Beitrag anzeigen
    Da ich die Datei aber aus verschiedenen Quellen zusamengefügt habe und kein Wissen in diesem Bereich habe wäre es fein wenn ein Profi den Code kurz überprüfen könnte
    Die Zeile

    Code:
    RewriteEngine On
    wird nur einmal benötigt.

    Bei den von Dir genannten Regeln ist es zwar nicht nötig, aber ich würde zudem direkt unter dem ersten (und zukünftig einzigen) "RewriteEngine On" noch die Zeile

    Code:
    RewriteBase /
    hinzufügen. Irgendwann wirst Du möglicherweise weitere Regeln hinzufügen, und die fehlende RewriteBase ist hier Fehlerquelle Nummer eins, was .htaccess-Probleme angeht. Liegt die .htaccess nicht direkt in dem Verzeichnis, auf das die Domain zeigt, muss die RewriteBase noch angepasst werden; gib dann bitte Bescheid.

    Wenn die Domain explizit genannt werden darf (was es auf eine Domain einschränkt und das blinde Kopieren in andere Projekte vereitelt), kannst Du den ersten und dritten Block zusammenfassen, so kannst Du in einigen Fällen eine Weiterleitung einsparen. Aus

    Code:
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>
    
    [...]
    
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>
    wird dann

    Code:
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
    
        RewriteCond %{HTTPS} !=on [NC,OR]
        RewriteCond %{HTTP_HOST} !=www.deinedomain.tld [NC]
        RewriteRule ^.*$ https://www.deinedomain.tld%{REQUEST_URI} [L,R=301]
    </IfModule>
    "deinedomain.tld" musst Du natürlich durch den echten Domainnamen ersetzen.

    Die Klammern um ".*" habe ich entfernt; sie werden hier nur benötigt, wenn Du statt "%{REQUEST_URI}" die Variante "/$1" nutzt. Beides ist funktional gesehen identisch.

    Code:
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{THE_REQUEST} index\. [NC]
    RewriteRule ^(.*)index\.(.*) /$1 [L,NC,R=301]
    </IfModule>
    Was genau möchtest Du damit bewirken? Warum hast Du %{THE_REQUEST} als Kriterium gewählt?

    Bevor Du Änderungen vornimmst, sichere Deine funktionierende Version, damit Du bei Problemen schnell dorthin zurückwechseln kannst.

    Gruß
    Jan
    Two hours of trial and error can save ten minutes of manual reading.

  3. #3
    Kunde
    Registriert seit
    23.02.2018
    Beiträge
    5

    AW: htaccess überprüfen

    Hallo Jan,
    vielen Dank für dein ausführliche Antwort.
    Deine Angaben habe ich übernommen, bis auf das zusammenlegen von den 2 Blöcken.
    Dadurch bekomme ich beim https://hstspreload.org/ folgende Fehlermeldung:
    Umleitung muß zuerst auf -https://domain.tld- erfolgen und nachher erst auf die www subdomain.
    Schätze deswegen muß die Umleitung in 2 Schritten erfolgen.

    Was genau möchtest Du damit bewirken? Warum hast Du %{THE_REQUEST} als Kriterium gewählt?
    Diesen Teil habe ich aus meiner alten htaccess Datei übernommen und ich dachte dadurch werden die index.html Dateien aufgerufen.
    z.Bsp. bei Eingabe -www.domain.tld/pfad1- wird -www.domain.tld/pfad1/index.html- aufgerufen und im Browser -www.domain.tld/pfad1/- angezeigt.
    Ist das nicht korrekt?
    Meine komplette htaccess derzeit (besprochener Bereich blau markiert):
    Code:
    AddDefaultCharset utf-8
    
    ErrorDocument 500 /errordocs/500.html
    ErrorDocument 404 /errorpages/404error.html
    ErrorDocument 403 /errordocs/403.html
    ErrorDocument 401 /errordocs/401.html
    
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>
    
    <IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" "expr=%{HTTPS} == 'on'"
    </IfModule>
    
    <IfModule mod_rewrite.c>
    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>
    
    <IfModule mod_rewrite.c>
    RewriteCond %{THE_REQUEST} index\. [NC]
    RewriteRule ^(.*)index\.(.*) /$1 [L,NC,R=301]
    </IfModule>
    
    <IfModule mod_expires.c>
      ExpiresActive On
      ExpiresDefault "access plus 1 month 1 days"
      ExpiresByType text/html "access plus 1 month 1 days"
      ExpiresByType image/gif "access plus 1 month 1 days"
      ExpiresByType image/jpeg "access plus 1 month 1 days"
      ExpiresByType image/png "access plus 1 month 1 days"
      ExpiresByType text/css "access plus 1 month 1 days"
      ExpiresByType text/javascript "access plus 1 month 1 week"
      ExpiresByType application/x-javascript "access plus 1 month 1 days"
      ExpiresByType application/javascript "access plus 1 month 1 days"
      ExpiresByType text/xml "access plus 1 seconds"
    </IfModule>
    
    <IfModule mod_headers.c>
      <FilesMatch "\.(js|css|xml|gz)$">
        Header append Vary: Accept-Encoding
      </FilesMatch>
    </IfModule>
    
    <IfModule mod_deflate.c>
    <FilesMatch "\\.(html|css|js|xml|php|txt)$">
    SetOutputFilter DEFLATE
    </FilesMatch>
    </IfModule>
    Danke für deine Unterstützung,
    Willi

  4. #4
    Reseller Avatar von mcseboard.de
    Registriert seit
    11.01.2002
    Beiträge
    719

    AW: htaccess überprüfen

    Hallo,
    ich denke es ist sinnvoll, wenn Du die Rewrite-Bereiche zusammenfasst und Dir die mehrfachen <IfModule mod_rewrite.c> einsparst...
    Thomas Praider
    ________________________
    < MCSEboard.de >-< Windows Server & IT Pro Community - MVPs inside >

  5. #5
    Forenexperte² (Reseller) Avatar von Enigma
    Registriert seit
    20.07.2001
    Beiträge
    18.464

    AW: htaccess überprüfen

    Zitat Zitat von williki Beitrag anzeigen
    Diesen Teil habe ich aus meiner alten htaccess Datei übernommen und ich dachte dadurch werden die index.html Dateien aufgerufen.
    z.Bsp. bei Eingabe -www.domain.tld/pfad1- wird -www.domain.tld/pfad1/index.html- aufgerufen und im Browser -www.domain.tld/pfad1/- angezeigt.
    Ist das nicht korrekt?
    %{THE_REQUEST} enthält den gesamten Request inklusive HTTP-Version und -Methode (also z. B. "GET /index.html HTTP/1.1"). Das nutzt man eigentlich nur, wenn man tatsächlich entsprechende Informationen über diese Daten benötigt. %{REQUEST_URI} enthält nur den mittleren Teil und ist das, was im Normalfall genutzt wird. Nötig ist aber auch das hier nicht, da ja in der RewriteRule das Vorkommen von "index\." gecheckt wird. Zwei Abfragen ergeben hier kein akkurateres Ergebnis.

    Das Flag [NC] (NoCase, es wird also kein Unterschied zwischen Klein- und Großbuchstaben gemacht) ist hier eher kontraproduktiv. Linux unterscheidet in Dateinamen zwischen Klein- und Großbuchstaben, eine automatische Aktion bei Aufruf eines Verzeichnisses lösen standardmäßig aber nur index.php. index.html, index.htm etc. aus, nicht Index.php, INDEX.php, INDEX.PHP, InDeX.PhP etc. Das lässt sich zwar manuell über die Direktive DirectoryIndex festlegen, aber alle Varianten abzudecken wäre Wahnsinn. Möchtest Du, dass auch Dateien mit großem Anfangsbuchstaben herangezogen werden, musst Du sie wie gesagt mit DirectoryIndex definieren; in der RewriteRule solltest Du dann lieber "[Ii]ndex\." verwenden.

    Ein weiteres Problem ist, dass vor und nach "index\." etwas Beliebiges stehen kann. /body-mass-index.pdf wird also ebenfalls umgeleitet, was sicherlich nicht gewollt ist.

    Das hintere (.*) ist zudem überflüssig, da kein $ als Zeichen für das Ausdrucksende hinzugefügt wurde.

    Meine Version wäre:

    Code:
    RewriteRule ^(.+/)?index\.(php|html?) /$1 [L,R=301]
    Vor dem "index" steht entweder nichts oder etwas, das durch einen Slash abgeschlossen wird, es werden nur kleinbuchstabige Index-Dateien zugelassen, und zwar explizit index.php, index.html und index.htm. Ungetestet, sollte aber funktionieren.

    Noch eine Warnung dazu: DirectoryIndex legt nicht nur fest, welche Index-Dateien automatisch aufgerufen werden, sondern auch, in welcher Reihenfolge dies versucht wird. Bei

    Code:
    DirectoryIndex index.php index.html index.htm
    werden, wenn es alle drei Dateien im Verzeichnis gibt, index.html und index.htm ignoriert. Nehmen wir an, es wird nun explizit /index.html aufgerufen und durch die .htaccess auf / gekürzt. In dem Fall wird die index.php aufgerufen, was nicht gewollt ist. Du musst also sicher sein, dass solche Fälle nicht eintreten können, also dass möglichst nur exakt eine Index-Datei pro Verzeichnis existiert.

    Gruß
    Jan
    Two hours of trial and error can save ten minutes of manual reading.

  6. #6
    Kunde
    Registriert seit
    23.02.2018
    Beiträge
    5

    AW: htaccess überprüfen

    Hallo Jan,

    danke für die Beschreibung und den Vorschlag.

    Habe jetzt die alte Version:
    Code:
    <IfModule mod_rewrite.c>
    RewriteCond %{THE_REQUEST} index\. [NC]
    RewriteRule ^(.*)index\.(.*) /$1 [L,NC,R=301]
    </IfModule>
    geändert auf:
    Code:
    <IfModule mod_rewrite.c>
    RewriteRule ^(.+/)?index\.(php|html?) /$1 [L,R=301]
    </IfModule>
    und alles scheint einwandfrei zu funktionieren.

    Den Eintrag zur DirectoryIndex habe ich nicht übernommen da ich nur eine Index-Datei je Verzeichnis habe und die Standarkonfiguration paßen sollte.

    Grüße,
    Willi
    Geändert von williki (14.03.2018 um 15:12 Uhr)

Ähnliche Themen

  1. Variable überprüfen
    Von maha im Forum Scriptsprachen / SQL / Anwendungen
    Antworten: 2
    Letzter Beitrag: 13.01.2004, 22:07
  2. Cookies über htaccess überprüfen
    Von Blackhawk im Forum Scriptsprachen / SQL / Anwendungen
    Antworten: 1
    Letzter Beitrag: 10.12.2003, 14:42
  3. Platzverbrauch POP3 überprüfen
    Von Thomas W im Forum Fragen rund um E-Mail
    Antworten: 2
    Letzter Beitrag: 15.07.2003, 22:55
  4. Formular überprüfen
    Von zzet im Forum HTML / SSI / Webdesign
    Antworten: 4
    Letzter Beitrag: 19.07.2002, 16:39
  5. URL überprüfen
    Von BFG im Forum Scriptsprachen / SQL / Anwendungen
    Antworten: 3
    Letzter Beitrag: 10.03.2002, 12:26

Stichworte

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •