Software Guide

Die besten Tipps, Anleitungen und Downloads

Ihre Werbung auf Software Guide

Sie möchten in dieser Box oder an anderer Stelle dieser Webseiten eine Werbung schalten? Sehen Sie sich dazu am besten einfach mal die verschiedenen Möglichkeiten an.


.htaccess und Mod-Rewrite für CMS und Blog

SackgasseDer folgende Artikel zeigt anhand vieler Beispiele, wie Weiterleitungen und andere hilfreiche Dinge mittels .htaccess und mod_rewrite eingerichtet werden können.

Inhalt

  1. Nicht verfügbare Subdomains auf Hauptdomains umleiten oder www loswerden
  2. Immer einen abschließenden Schrägstrich hinzufügen
  3. Diverse Weiterleitungen
  4. HTTPS vermeiden
  5. HTTPS erzwingen
  6. Hotlinking unterbinden
  7. Seiten gemäß Referrer blocken
  8. Wartungs-Seite einrichten
  9. Zugriffschutz einrichten
  10. Weitere .htaccess- und Mod-Rewrite-Informationen im Web

1. Nicht verfügbare Subdomains auf Hauptdomains umleiten oder www loswerden

Bei einigen Hostern erfolgt beim Aufruf einer nicht vorhandenen Sub-Domain, z.B. http://subdomain.domain.tld, keine Fehlermeldung o.ä., sondern es wird der gleiche Inhalt wie beim Aufruf der Hauptdomain (http://domain.tld/) ausgegeben. Dies kann u.a. aus SEO-Sicht problematisch sein, da Suchmaschinen wie Google dies als doppelten Content werten und die Seite entsprechend bestrafen könnten.
Außerdem sollte man vermeiden, dass eine Webseite sowohl unter http://domain.tld als auch http://www.domain.tld erreichbar ist, ein Aufruf der ungewünschten URL (je nach Belieben mit oder ohne www) sollte automatisch auf die gewünschte URL umleiten.

Lösung für Seiten ohne www (http://domain.tld):

RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.tld$ [NC]
RewriteRule ^(.*)$ http://domain.tld/$1 [R=301,L]


Lösung für Seiten mit www (http://www.domain.tld):

RewriteCond %{HTTP_HOST} !^www\.domain\.tld$ [NC]
RewriteRule ^(.*)$ http://www.domain.tld/$1 [R=301,L]

Eine bestimmte Subdomain kann man wie folgt von der Regel ausschließen, Beispiel 1 (http://domain.tld):

RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.tld$ [NC] [OR]
RewriteCond %{HTTP_HOST} !^subdomain\.domain\.tld$ [NC]
RewriteRule ^(.*)$ http://domain.tld/$1 [R=301,L]

Subdomain ausschließen, Beispiel 2 (http://www.domain.tld):

RewriteCond %{HTTP_HOST} !^www\.domain\.tld$ [NC] [OR]
RewriteCond %{HTTP_HOST} !^subdomain\.domain\.tld$ [NC]
RewriteRule ^(.*)$ http://www.domain.tld/$1 [R=301,L]

2. Immer einen abschließenden Schrägstrich hinzufügen

Wenn das Content-Management- oder Blog-System Artikel-URLs wie etwa http://blog-cms.de/2007/hallo-welt/ verwendet, kann i.d.R. der abschließende Schrägstrich beim Seitenaufruf weggelassen werden. Allerdings hat dies aus SEO-Sicht Nachteile (doppelter Content), außerdem zeichnen Webseiten-Statistik-Tools Zugriffe für 2 unterschiedliche Seiten auf.

Abhilfe schaft folgende Regel, die immer einen abschließenden Schrägstrich hinzufügt:

# Add trailing slash 
RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]

3. Diverse Weiterleitungen

  • Geänderter Verzeichnispfad (1):
    Angenommen man möchte alle Aufrufe von http://domain.tld/tipps/browser/ weiterleiten auf http://domain.tld/software/firefox/, so nimmt man folgende Regel:

    RewriteRule ^tipps/browser/?$ /software/firefox/ [R=301,L]
  • Geänderter Verzeichnispfad (2):
    Möchte man alle Aufrufe von http://domain.tld/tipps/browser/ und allen Unterseiten (z.B. http://domain.tld/tipps/browser/unterseite/) weiterleiten auf http://domain.tld/software/firefox/, so nimmt man folgende Regel:

    RewriteRule ^tipps/browser/(.*)$ /software/firefox/ [R=301,L]
  • Geänderter Verzeichnispfad (3):
    Möchte man alle Aufrufe von http://domain.tld/tipps/browser/ und allen Unterseiten (z.B. http://domain.tld/tipps/browser/unterseite/) weiterleiten auf http://domain.tld/software/firefox/ und zudem die Unterseite(n) mit übertragen (also z.B. um http://domain.tld/software/firefox/unterseite/ zu erreichen), so nimmt man folgende Regel:

    RewriteRule ^tipps/browser/(.*)$ /software/firefox/$1 [R=301,L]
  • Unterverzeichnis auf Hauptseite umleiten:
    Möchte man alle Aufrufe von http://domain.tld/tipps/browser/ an die Hauptseite http://domain.tld weiterleiten, so kann man folgende Regel anwenden:

    RewriteRule ^tipps/browser/?$ / [R=301,L]
  • Geänderte Permalink-Struktur:
    Wir nehmen an, dass die Artikel-URL in einem Blog wie folgt aufgebaut ist: http://domain.tld/2007-01-31/artikel-titel/, dabei entsprechen die Zahlen dem Jahr, Monat und Tag, an dem die Artikel geschrieben worden sind. Nun soll diese Struktur geändert werden in http://domain.tld/blog/2007-01-31/artikel-titel/. Umsetzungsmöglichkeit:

    RewriteRule ^200(6|7)-([0-9]{2})-([0-9]{2})/(.*)$ /blog/200$1-$2-$3/$4 [L,R=301]
  • Weiterleitung einer Webseite einschließlich aller Unterseiten auf eine andere Domain (1):
    Möchte man sämtliche Aufrufe einer Webseite auf die Hauptseite einer anderen Domain umleiten, so kann man folgende Regel verwenden:

    RewriteRule ^(.*)$ http://domain.tld/ [R=301,NC,L]
  • Beispiel-Einsatz dieser Regel: Man hat eine neue Domain reserviert, will aber dort noch keine Webseite betreiben, sondern jeden Aufruf auf eine andere Webseite umleiten.

  • Weiterleitung einer Webseite einschließlich aller Unterseiten auf eine andere Domain (2):
    Wenn eine Webseite auf eine neue Domain umgezogen ist, also z.B. von http://domain.tld auf http://domain-neu.tld, so kann man folgende Regel verwenden, um alle Aufrufe korrekt auf die neue Domain weiterzuleiten:

    RewriteCond %{HTTP_HOST} ^domain.tld$ [NC]
    RewriteRule ^(.*)$ http://domain-neu.tld/$1 [R=301,L]

4. HTTPS vermeiden

Möchte man die Verwendung von HTTPS vermeiden bzw. Aufrufe der Seite via https auf http umbiegen, so kann man folgende Regel verwenden:

RewriteCond %{SERVER_PORT}     !^80$
RewriteRule (.*) http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

5. HTTPS erzwingen

Möchte man für eine (Sub)Domain erreichen, dass bei jedem Seitenaufruf als Protokoll immer https und nicht http verwendet wird, so kann man folgende Regel anwenden:

RewriteCond %{SERVER_PORT}     !^443$
RewriteRule (.*)  https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

6. Hotlinking unterbinden

Um Hotlinking, also das Einbetten von Bildern auf einer fremden Website, zu unterbinden, kann man folgende Regel anwenden:

RewriteCond %{HTTP_REFERER} !^http://(.+\.)?domain\.tld/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?bloglines\.(de|com)/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F]

Allerdings werden dadurch beispielsweise auch im Feedreader keine Grafiken mehr angezeigt. Man kann aber z.B. gängige Online-Feedreader von der Regel ausschließen, im obigen Beispiel wird Bloglines ausgeschlossen.

Möchte man bei Hotlinking eine Alternativ-Grafik anzeigen lassen, so ersetzt man die letzte Zeile durch
RewriteRule .*\.(jpe?g|gif|bmp|png)$ images/hotlinking.gif [L], wobei images/hotlinking.gif der Dateipfad zur Alternativgrafik ist.

7. Seiten gemäß Referrer blocken

Mit folgender Regel kann man bestimmte Webseiten gemäß Referrer blocken, um z.B. Hotlinking nicht generell zu unterbinden, aber bestimmten Webseiten auszuschließen.

RewriteCond %{HTTP_REFERER} ^http://(.+\.)?domain1\.tld/ [NC]
RewriteCond %{HTTP_REFERER} ^http://(.+\.)?domain2\.tld/ [NC]
RewriteRule .* - [F]

Möchte man stattdessen den Zugriff erlauben und nur für Bild-Dateien verbieten, so ersetzt man die letzte Zeile durch RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F].

8. Wartungs-Seite einrichten

Möchte man die Seite vor sämtlichen Zugriffen sperren aber selbst Zugriff auf die Seite haben, so kann man sich wie folgt behelfen:
Man lädt in das Hauptverzeichnis eine HTML-Datei hoch, z.B. wartung.html, mit der man einen entsprechenden Wartungshinweis ausgibt. Nun lädt man eine .htaccess-Datei mit folgendem Inhalt in das Hauptverzeichnis hoch (die ggf. bereits bestehende .htaccess-Datei benennt man zuvor um):

RewriteCond %{REMOTE_ADDR} !=11.12.13.14
RewriteCond %{REQUEST_URI} !=/wartung.html [NC]
RewriteRule ^(.*)$ /wartung.html [R=302,NC,L]

Die Zahl 11.12.13.14 entspricht dabei der eigenen IP-Adresse. D.h. dass alle Besucher auf wartung.html umgeleitet werden bis auf die Besucher mit der angegebenen IP-Adresse.

9. Zugriffschutz einrichten

Auf einem Apache-Server ist es sehr einfach, einen sicheren Zugriffschutz einzurichten, d.h. dass beim Aufruf der Seite ein Login-Fenster erscheint, wo Benutzername und Passwort eingegeben werden muss.
Auth

Vorgehensweise:

  1. .htpasswd-Datei erzeugen: In dieser Datei werden alle Benutzer-Accounts (Namen und Passwörter) gespeichert. Die dort hinterlegten Passwörter werden mit einer Hash-Funktion umgewandelt, so dass das tatsächliche Passwort nicht ausgelesen werden kann. Es gibt u.a. viele Webdienste, die den Inhalt für die .htpasswd-Datei erzeugen können, einer davon ist .htpasswd Generator von www.phpbb.de. Den damit erzeugten Text kopiert man in eine leere Textdatei, speichert diese unter ‚.htpasswd‘ (ohne .txt!) ab und lädt sie per FTP z.B. in das Verzeichnis hoch, welches man schützen möchte.
  2. .htaccess-Datei erzeugen: Nun wird noch eine .htaccess-Datei benötigt, welche man wie die .htpasswd-Datei mittels leerer Textdatei erzeugt. Möglicher Inhalt:
    # Authentification
    AuthName "Meine Webseite"
    AuthType Basic
    AuthUserFile /www/html/ordner/unterordner/.htpasswd
    require valid-user

    Unter ‚AuthName‘ kann man einen beliebigen Titel eingeben, der dann im Login-Fenster erscheint. Unter ‚AuthUserFile‘ muss der absolute Root-Pfad des Servers zur .htpasswd eingegeben werden.
    Nachdem man nun diese .htaccess-Datei in das zu schützende Verzeichnis hochlädt, ist der Zugriffschutz aktiv.

    Man kann übrigens auch einzelne Seiten vor dem Zugriffschutz ausschließen, die .htaccess-Datei sieht dann z.B. wie folgt aus:

    # Authentification
    AuthName "Meine Webseite"
    AuthType Basic
    AuthUserFile /www/html/ordner/unterordner/.htpasswd
    <Files *.*>
    require valid-user
    </Files>
    <Files ~ "(_401.html|_404.html)">
    satisfy any
    </Files>

    In diesem Beispiel sind alle Zugriffe geschützt bis auf die Dateien _401.html und _404.html. Wie zu sehen, werden mehrere Dateien mit einem senkrechten Strich (Pipe: |) getrennt.

10. Weitere .htaccess- und Mod-Rewrite-Informationen im Web