INFOPORTAL BERLIN

Immer wiederkehrende Fragen einfach erklärt

htaccess

htaccess – was ist DAS denn?

Bei der .htaccess Datei handelt es sich um eine reine Textdatei, mit welche der User durch Verzeichnis spezifische Konfiguration NCSA und kompatible Webserver beeinflussen kann. Einer der bekanntesten und am weitgehend verbreiteten Server ist der Apache HTTP Server.

Was ist denn die .htaccess Datei denn nun genau?

Als Erstes beachten wir hier die Schreibweise. Diese Datei beginnt mit einem Punkt und hat keine weitere Datei Endung. Der Syntax ist also .htaccess und darf auch nicht anders bezeichnet werden. Sie kann mit jeden normalen Texteditor erstellt werden und enthält keinerlei Formatierungen. Anschließend legen wir sie in die Root, also dem Wurzelverzeichnis auf dem Server. Somit ist sie auch in alle UnterverzeichnisseSSL htaccess verfügbar und gültig. Mit entsprechenden Befehlszeilen lassen sich Dateizugriffe, Fehlerseiten, Weiterleitungen sowie diverse Einflussnahmen auf den Webserver einrichten.

Des weiteren kann eine falsche Konfiguration dieser Datei den kompletten Seitenzugriff auf dem Server blockieren. Ferner ist noch zu beachten, dass nach dem Abspeichern dieser Datei die Funktion auch ohne Neustart des Servers aktiv ist.

Inhalt einer .htaccess Datei

Im folgenden betrachten wir einmal eine Standard Datei für eine WordPress Seite.

Im Normalfall sollten die in .htaccess  eingefügten mod_rewrite Anweisungen wie folgt aussehen:

  1. # BEGIN WordPress
  2. <IfModule mod_rewrite.c>
  3. RewriteEngine On
  4. RewriteBase /
  5. RewriteRule ^index\.php$ – [L]
  6. RewriteCond %{REQUEST_FILENAME} !-f
  7. RewriteCond %{REQUEST_FILENAME} !-d
  8. RewriteRule . /index.php [L]
  9. </IfModule>
  10. # END WordPress

Diese Anweisungen werden wir nun Zeile für Zeile durcharbeiten.

  •  1. Zeile – # BEGIN WordPress

Im Folgenden handelt es sich lediglich um einen Kommentar.

  •  2. Zeile – <IfModule mod_rewrite.c>

Die Direktive bzw. Anweisung IfModule soll Sicherstellen, dass mod_rewrite in Apache korrekt eingebunden ist. Das Modul mod_rewrite in Apache ist eingebunden, somit werden alle Anweisungen zwischen <IfModule mod_rewrite.c> und </IfModule> von Apache verarbeitet.

  •  3. Zeile – RewriteEngine On

Die RewriteEngine-Direktive setzen wir hier auf On. Also aktivieren wir damit mod_rewrite und die Rewrite-Anweisungen werden ausgeführt und verarbeitet.

  •  4. Zeile – RewriteBase/

Die Direktive RewriteBase sorgt in diesem Fall dafür, dass ein Slash ans Ende der URL gesetzt wird. Der Slash wird jedoch erst nach Abarbeitung aller Rewrite-Regeln hinzugefügt.

Prinzipiell muss man sich das so vorstellen: Bevor die angefragte URL die Rewrite-Regeln durchläuft, wird sie von Apache angepasst. Apache löscht den Domainnamen sowie den darauf folgenden Slash.

Aus:     https://www.meineseite.de/wordpress-artikel

Wird:   wordpress-artikel

Nachdem die Regen durchlaufen sind und die URL ggf. geändert wurde oder auch nicht, wird der Slash ans Ende der URL angehängt:

wordpress-artikel

  • 5.  Zeile – RewriteRule ^index\.php$ – [L]

In dieser Zeile haben wir nun die erste Rewrite-Regel. Die Regel besagt, dass wenn es sich um die angefragte URL um index.php handelt, dann nehme keine Änderung an der URL vor.

Der [L]-Flag gibt in diesem Fall an, dass die Abarbeitung der Regeln gestoppt wird, wenn die besagte Regel zutrifft.

  •  6. Zeile – RewriteCond %{REQUEST_FILENAME} !-f

Diese Regel prüft, ob die zu der angefragten URL passende Datei existiert.

Angenommen, wir nehmen wieder folgende URL:

wordpress-artikel

Intern belegt Apache die Variable %{REQUEST_FILENAME} dann mit path/page/wordpress-artikel. Die Anweisung -f  (Abkürzung für „file“) dient dazu, zu überprüfen, ob die Datei existiert oder nicht. Das Ausrufezeichen ! sorgt einfach für eine Negation des Werts.

Vereinfacht ausgedrückt:
Gib den Wert TRUE zurück, wenn die Datei bzw. der Dateipfad %{REQUEST_FILENAME} im physikalischen Dateisystem nicht existiert.

  •  7. Zeile – RewriteCond %{REQUEST_FILENAME} !-d

Analog zur vorherigen Zeile testet das System, ob ein entsprechendes Verzeichnis existiert. Die Anweisung -d steht hier für die Abkürzung Directory.

  •  8. Zeile – RewriteRule . /index.php [L]

Treffen die Regeln in Zeile 6 und 7 zu, wird diese Regel abgearbeitet. Hier wird nichts weiter gemacht, als die Anfrage zur index.php weiterzuleiten.

Ruft ihr z.B. die URL eines Bildes eures Blogs auf, dann existiert zu der angefragten URL auch der entsprechende physikalische Dateipfad. In dem Fall liefert Zeile 6 also FALSE zurück und es wird direkt das Bild zum Client ausgeliefert.

Angenommen, wir fragen irgend eine URL ab. Diese wird umgewandelt, sie existiert jedoch in keinem Dateipfad im Dateisystem. Somit wird die Anfrage an index.php geleitet.

  •  9. Zeile – </IfModule>

Im Gegensatz zur öffnenden IfModule-Anweisung wird sie in dieser Zeile geschlossen.

  •  10. Zeile – # END WordPress

Diese letzte Zeile beinhaltet nur einen abschließenden Kommentar.

 

RewriteRule

Allgemeine Syntax von RewriteRule:

RewriteRule Argument1 Argument2 [spezielle Angaben]

RewriteRule   ist die Anweisung,

Argument1   die vom Besucher aufgerufene URL,

Argument2   die URL zu der der Webserver intern weiterleitet.

Argument1 wird oft als regulärer Ausdruck angeführt,
^ steht für den Textanfang und $ für das Textende

.* steht für ein beliebiges Zeichen (.) beliebig oft (*)

Alles was links in () steht, kann man rechts als $1 verwenden ( $2,$3,… für weitere Klammern Paare )

Beispiel einer einfachen Weiterleitung

RewriteRule ^info.html$ https://neuedomain.tld/auskunft.html [R301,L]

Ruft ein Besucher die URL https://www.altedomain.tld/info.html auf, so wird er automatisch zu https://www.anderedomain.tld/auskunft.html weitergeleitet.

Die Angabe R=301 gibt an, dass eine 301 Weiterleitung (permanente Weiterleitung) genutzt wird. Das L (last rule) gibt an, dass es sich um die letzte Anweisung bzw Regel handelt. Folglich finden nachfolgende Anweisungen und  Regeln keine Berücksichtigung.

 

Duplicate Content

Wenn eine Seite mit oder ohne www. erreichbar ist kann Google diese eventuell abstrafen. Denn hier wird für die Suchmaschinen die gleiche Seite als zwei verschiedene Seiten indiziert. Im angesprochenen Beispiel sieht es dann so aus:

  • www.meineseite.de
  • meineseite.de

Die Lösung hierfür ist also nicht besonders kompliziert.

  •  # Die Seite wird immer mit  www. ausgegeben
  • RewriteEngine On
  • RewriteCond %{HTTP_HOST} !www\.meineseite\.de$
  • RewriteRule ^(.*)$ www.meineseite.de/$1 [R=301,L]

Wir prüfen als Erstes, ob die Seite mit www. aufgerufen wird. Ist dieses nicht der Fall (!www\.), wird sie auf www.meineseite.de umgeleitet.

Webseiten mit SSL Verschlüsselung können genauso festgelegt werden.

  • # Alle Aufrufe gehen auf SSL
  • RewriteEngine On
  • RewriteCond %{HTTPS} off
  • RewriteRule (.*) https://meineseite.de/$1 [R=301,L]

Hierbei wird überprüft ob die Seite mit https aufgerufen wurde (https off). Da in der Regel die Aufrufe von den meist nicht als https aufgerufen werden, wird unsere Seite per 301 Umleitung auf die https Version umgeleitet.

Der vergessene „Trailing Slash“

Trailing Slash ist der Schrägstrich und kann auch hier bei den Suchmaschinen ein Duplicate Content auslösen. Mit nachstehender  Anweisung wird ein Slash Zeichen (/) am Ende der URL angehangen.

  • # Alle Domains mit trailing slashes
  • RewriteEngine On
  • RewriteCond %{REQUEST_URI} /+[^\.]+$
  • RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

Bei den Weiterleitungen sind alle Optionen auf korrekte Funktion zu überprüfen. Je nach Server und Anbieter können einzelne Parameter leicht abweichen. Hierzu sind die Standardwerte für Apache aufgeführt. Browser-Plug-Ins wie „Redirect Plath“ (Chrome) helfen den Status der Umleitung zu testen. Besondere Aufmerksamkeit fordert die Weiterleitung, vor allem bei eingesetzten Caching Tools von WordPress.

QSA ein Flag für alle Anhänge

Die Flag [QSA] (query string appand) sorgt dafür, dass auch Abfrage Parameter die mit einem Fragezeichen angehangen werden, wie z.B. www.meineseite.de/schulung.php?id=xxx&key=value, mit übergeben werden.

RewriteRule /pages/(.+) /schulung.php?page=$1 [QSA]

Als Ergebnis werden alle Aufrufe mitsamt aller Abfrage Parameter (query-Strings) umgeleitet.

 

NC | nocase (no case)

Die Parameter Anweisung [NC] ist ein Flag, welches den Unterschied der URL und der Pattern case-insensitive überprüft. Hier wird mit diesem Flag festgelegt, dass das Muster (Pattern) nicht zwischen Groß- und Kleinschreibung unterscheidet.

 

Aktivierung Compression GZip

Ein weiterer Bereich den wir mittels der .htaccess Datei steuern können ist die Komprimierung der Dateien mittels GZip. Nachfolgende Code Schnipsel fügen wir in diese Datei ein. Diese Anweisung komprimiert die entsprechenden Dateien.

  • <ifModule mod_gzip.c>
  • mod_gzip_on Yes
  • mod_gzip_dechunk Yes
  • mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
  • mod_gzip_item_include handler ^cgi-script$
  • mod_gzip_item_include mime ^text/.*
  • mod_gzip_item_include mime ^application/x-javascript.*
  • mod_gzip_item_exclude mime ^image/.*
  • mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
  • </ifModule>

 

  • <IfModule mod_deflate.c>
  • AddOutputFilterByType DEFLATE text/plain
  • AddOutputFilterByType DEFLATE text/html
  • AddOutputFilterByType DEFLATE text/xml
  • AddOutputFilterByType DEFLATE text/css
  • AddOutputFilterByType DEFLATE application/xml
  • AddOutputFilterByType DEFLATE application/xhtml+xml
  • AddOutputFilterByType DEFLATE application/rss+xml
  • AddOutputFilterByType DEFLATE application/javascript
  • AddOutputFilterByType DEFLATE application/x-javascript
  • </IfModule>

Den Geschwindigkeitsvorteil können wir dann wieder mit PageSpeed oder Pingdom überprüfen.

nach oben

Updated: 19. Januar 2018 — 23:19
INFOPORTAL BERLIN © 2017 >> Impressum << - >> Datenschutz << - >> Disclaimer << Frontier Theme