htaccess im Online Marketing

  • Allgemeines zur htaccess-Datei
  • URLs umwandeln: Syntax
  • URLs umwandeln: Beispiele
  • Einzelne URLs weiterleiten: Syntax & Beispiel
  • 404 Fehlerseite: Syntax & Beispiel
  • X-Robots-Tag: Syntax & Beispiel
  • (Aus)sperren: Syntax & Beispiele
  • Startdatei als Startseite
  • Expires Header
  • Gzip aktivieren

Allgemeines zur htaccess-Datei


  • Mit einer .htaccess-Datei lassen sich Apache-Webserver konfigurieren, beispielsweise für URL-Weiterleitungen oder Zugriffsberechtigungen.
  • Eine .htaccess ist nur für den aktuellen Ordner mit seinen Dateien und dessen Unterordner mit deren Dateien gültig.
  • Die Regeln innerhalb einer .htaccess werden basierend auf RegEx (Reguläre Ausdrücke) definiert.
  • Für Kommentare innerhalb einer .htaccess-Datei nutzt man #.
  • Es kann ein Ausrufezeichen ! vor einem Ausdruck stehen, um den Regulären Ausdruck zu negieren.

URLs umwandeln: Syntax


  • URLs lassen sich mit dem mod_rewrite Modul umwandeln.
  • Das mod_rewrite Modul muss vor Gebrauch in der Htaccess mittels des Befehls RewriteEngine On aktiviert werden.
  • Man kann alle mode_rewrite-Anweisungen in einer Bedingung
    <IfModule mod_rewrite.c>...</IfModule>
    zusammenfassen, so dass sie nur dann ausgeführt werden, wenn das Modul installiert wurde.
  • Syntax für URL-Rewrites ist:
    RewriteRule RegEXURLAuswahl RegExURLAusgabe [OptionaleWeitereAnweisung]

  • Optionen für Weitere Anweisungen in RewriteRule:
  • redirect oder R → Statuscode für Weiterleitung (Standardmässig steht dieser bei Apache auf 302)
  • forbidden oder F → Statuscode 403
  • gone oder G → Statuscode 410
  • last oder L → Nach einer RewriteRule keine weitere mehr ausführen.
  • next oder N → Abarbeitung der RewriteRule-Direktiven wird abgebrochen und nochmals gestartet.
  • chain oder C → Nächste RewriteRule nur ausgewerten, falls die aktuelle Regel zutrifft.
  • type= oder T= → Mit dieser Option lässt sich ein bestimmter MIME-Type bestimmen.
  • nosubreq oder NS → Regel überspringen, falls der aktuelle Request ein Sub-Request ist.
  • nocase oder NC → Bei der Überprüfung auf Gleichheit des Ausdrucks und der URL nicht auf Groß- und Kleinschreibung achten.
  • qsappend oder QSA → An die Umleitung manuell einen neuen Query-String hängen und den alten dabei nicht komplett ersetzen.
  • noescape oder NE → Sonderzeichen von mod_rewrite nicht maskieren lassen.
  • skip=N oder S=N → Die nächsten N RewriteRule-Direktiven überspringen.
  • env=VAR:VAL oder E=VAR:VAL → Eine Umgebungsvariable erzeugen, hier z.B. die Variable VAR mit dem Wert VAL.
  • cookie=NAME:VAL:domain [:lifetime[:path]] oder CO= → Setze Cookie namens NAME mit dem Wert VAL und Domain als domain, lifetime (Lebenszeit in Minuten) und path (Pfad des Cookies) sind optional.
  • proxy oder P → Zugriff von dem Apache-Modul mod_proxy aus auf die URL. Dazu muss mod_proxy aktiviert und die URL valide sein.
  • passthrough oder PT → Mehrere URL->Dateinamen-Übersetzer (wie etwa mod_alias und mod_rewrite) zusammen benutzen.

  • Zusätzliche Angaben:
  • RewriteBase → Gibt das Wurzelverzeichnis an.
  • RewriteCond → Legt fest, wann und ob eine Regel greifen soll. Mit %{REQUEST_FILENAME} wird darin eine vorgegebene Serverkonstante (die aufgerufene Datei) angesprochen.
  • Options +FollowSymlinks → "Symbolische Links" im Webserver einstellen.

URLs umwandeln: Beispiele


  • /index.html → /
    RewriteEngine On
    RewriteCond %{THE_REQUEST} index\.html [NC]
    RewriteRule (.*)index\.html http://MeineDomain.de$1 [NC,R=301]
  • /index.html und /index.php → /
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(html?|php)\ HTTP/
    RewriteRule ^index\.(html?|php)$ http://www.MeineDomain.de/ [R=301,L]
  • .html → .php
    RewriteBase /
    RewriteRule ^(.*).html$ $1.php [R=301, L]
  • ohne www. → www.
    RewriteCond %{HTTP_HOST} !^www\.domain\.de$ [NC]
    RewriteRule ^(.*)$ http://www.domain.de/$1 [L,R=301]
  • www. → ohne www.
    RewriteCond %{HTTP_HOST} ^www.domain.de [NC]
    RewriteRule ^(.*)$ http://domain.de/$1 [L,R=301]
  • Alle Dateien des Verzeichnisses /produkte/ → /produkte.php, ausser /produkte/separat.php
    RewriteRule ^produkte/separat.php /separat.html [L,R=301]
    RewriteRule ^produkte(.*)$ /produkte.php [L,R=301]
  • /article.jsp?id=8932 → /neueste-nachrichten.htm
    RewriteRule ^article.jsp?id=(.*)$ /neueste-nachrichten.htm [L,R=301]
  • /category/category-name → /category-name
    RewriteRule ^category/(.+)$ http://www.domain.de/$1 [R=301,L]
  • /ordner1/de/ordner2/index.php → /keyword-ordner/keyword.html
    RewriteCond %{REQUEST_URI} keyword-ordner/keyword.html$
    RewriteRule (.*) ordner1/de/ordner2/index.php

Einzelne URLs weiterleiten: Syntax & Beispiel


  • Syntax für 301 URL-Weiterleitungen ist:
    Redirect 301 AlteRelativeURL NeueAbsoluteURL
    Allternative Schreibweise: Redirect permanent AlteRelativeURL NeueAbsoluteURL
  • Beispiel:
    Redirect 301 /a.php http://www.meinedomain.de/b.php

404 Fehlerseite: Syntax & Beispiel


  • Syntax für die Angabe der 404 fehlerseite:
    ErrorDocument 404 URLzurFehlerseite
  • Beispiel:
    ErrorDocument 404 /404.php

X-Robots-Tag: Syntax & Beispiel


  • Jede Anweisung, die in einem Robots-Meta-Tag verwendet werden kann, kann auch als X-Robots-Tag in einer htaccess verwendet werden.
  • Anweisungen, die ohne einen User-Agent angegeben werden, sind für alle Crawler gültig.
  • Die Groß- und Kleinschreibung muss weder beim Namen noch bei den angegebenen Werten beachtet werden.
  • Das X-Robots-Tag wird im SEO-Bereich meist verwendet, wenn es nicht Möglich ist direkt in einer Datei ein Robots-Meta-Tag zu hinterlegen, z.B. PDFs oder Worddateien.
  • Syntax für das X-Robots-Tag:
    X-Robots-Tag: DieAnweisung

  • Beispiel:
    X-Robots-Tag: googlebot: nofollow
    X-Robots-Tag: otherbot: noindex, nofollow

(Aus)sperren: Syntax & Beispiele


  • Syntax für das Aussperren:
    SetEnvIf Was Wer Wert (Nur wenn Wert-Variablen genutzt werden sollen)
    Order allow, deny
    Allow from
    Deny from
  • Beispiel: Alle IE Nutzer aussperren
    SetEnvIf User-Agent MSIE WegHier
    Order allow,deny
    Allow from all
    Deny from env=WegHier


    Alternative über mod_rewrite:
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} MSIE
    RewriteRule ^ - [F]
  • Beispiel: Alle IE 6 Nutzer aussperren
    SetEnvIf User-Agent "MSIE 6" WegHier
    Order allow,deny
    Allow from all
    Deny from env=WegHier
  • Beispiel: Googlebot aussperren
    SetEnvIf User-Agent googlebot WegHier
    Order allow,deny
    Allow from all
    Deny from env=WegHier
  • Beispiel: Website aussperren
    SetEnvIf Referer "http://www.weghier.de" WegHier
    Order allow,deny
    Allow from all
    Deny from env=WegHier


    Alternative über mod_rewrite:
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} ^http://weghier.de/ [NC]
    RewriteRule ^ - [F]
  • Beispiel: domain.de, traffic.website.com und IPs beginnend mit 192.168 aussperren
    order deny, allow
    deny from .domain.de
    deny from traffic.website.com
    deny from 192.168
    allow from all
  • Beispiel: Eigene .htaccess sperren
    <Files .htaccess>
    order allow,deny
    deny from all
    </Files>
  • Beispiel: Dateien mit Endung .tpl, .ini, .htaccess sperren
    <FilesMatch "\.(tpl|ini|htaccess)$">
    order allow,deny
    deny from all
    </FilesMatch>

Startdatei als Startseite


  • Syntax:
    DirectoryIndex DieStartDatei

  • Beispiel: index.html als Startdatei
    DirectoryIndex index.html

Expires Header verwenden


  • Expires Header erzwingen das Caching für einen bestimmten Zeitraum.
  • Beispiel: Default auf 1 Tag, einzelne Dateitypen auf x
    Statt seconds kann auch hour, week, month, etc. gewählt werden.
    ExpiresActive on
    ExpiresDefault "access plus 86400 seconds"
    ExpiresByType image/gif "access plus x seconds"
    ExpiresByType image/jpeg "access plus x seconds"
    ExpiresByType image/png "access plus x seconds"
    ExpiresByType image/x-icon "access plus x seconds"
    ExpiresByType text/css "access plus x seconds"
    ExpiresByType application/javascript "access plus x seconds"
    ExpiresByType application/x-javascript "access plus x seconds"
    ExpiresByType application/pdf "access plus x seconds"
    ExpiresByType text/plain "access plus x seconds"

Gzip aktivieren


  • Per Gzip lassen sich Dateien auf dem Server komprimieren.
  • Klappt aber nur, wenn das Apache-Modul mod_gzip installiert ist.
  • Beispiel:
    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.*
  • Falls das Modul nicht auf dem Server installiert ist, kann alternativ PHP die Arbeit übernehmen. Diese Variante frisst allerdings auch mehr CPU.
    php_value output_handler ob_gzhandler