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

Was ist ein Trackback?

20 Trackbacks/Pings:

30 Comments:

Gravatar

1

Martin Hiegl

14. Mai 2007, 10:36

Sehr schön, danke! Bist du dir bei Punkt 2 sicher, dass die Suchmaschinen den abschließenden Slash nicht generell ignorieren bzw. selbst hinzufügen, wenn nicht direkt auf eine Datei verwiesen wird oder Attributschlangen enthalten sind? IMHO ist das eher eine optische Sache

Gravatar

2

tboley

14. Mai 2007, 10:46

Serh gute Zusammenfassung, besten Dank dafür!

Gravatar

3

iKArus

14. Mai 2007, 11:36

Endlich mal alles Wichtige zu diesem Thema kurz und gut erklärt, danke. :)

Gravatar

4

Ben

14. Mai 2007, 14:03

sehr schöner Artikel und man verstht jedes einzelne Wort.

Top Artikel.

Aber was hat der Trackback mit den Mozilla Tipps hier zu suchen ?

Gravatar

5

Hasan

14. Mai 2007, 14:14

Klasse Artikel, kann man immer gebrauchen :)

Gravatar

6

Sam

14. Mai 2007, 18:50

Excellent.
(I wish I could speak this language, too.)

Gravatar

7

Frank

14. Mai 2007, 20:33

@ Michael
Prima verständlich zusammengefasst – für „so Zeuch“ hab ich zum Glück meine Progis ;-)

@ Martin Hiegl
Aslo ich bin hinsichtlich Punkt 2 mehr als sicher, daß Michael Recht hat – such mal in Google nach: Trailing Slash Cutts …

Gravatar

8

missyCola

14. Mai 2007, 22:00

Super Artikel! Vielen Dank! Gerade die Hotlinking Thematik beschäftigt mich schon seit einiger Zeit.
Zwei Fragen zu Punkt 6.):
Ist es gewollt, dass in der Zeile RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F] das jpeg mit nem Fragezeichen in der Mitte geschrieben wird?

Und wie würde die (Bild-) Erlaubnis für den Google Reader aussehen? Ist folgendes richtig? RewriteCond %{HTTP_REFERER} !^http://(www\.)?google\.(de|com)\.reader/ [NC]

Gravatar

9

Michael (Author)

14. Mai 2007, 23:07

Vielen Dank für Euer Feedback :-)

@1 Martin bzw. @7Frank: 100% war ich mir jetzt nicht sicher, aber Frank hat mich nun überzeugt ;-)

@8 missyCola:
Das Fragezeichen bei jpe?g sorgt dafür, dass sowohl „jpg“ als auch „jpeg“ berücksichtigt wird, genau so könnte man auch (jpeg|jpg|gif|bmp|png) schreiben.

Kenne jetzt nicht den genauen Pfad zum Google Reader (ich nehme Bloglines :-), aber ich denke Google könntest Du generell erlauben, also:
RewriteCond %{HTTP_REFERRER} ^http://(.+\.)?google.* [NC]

Gravatar

10

Lukas

15. Mai 2007, 16:05

Danke! Ich wollte mich sowieso schon mal über die Funktionen von mod_rewrite informieren, um damit „schönere URLs“ zu erzeugen.

Gravatar

11

MichaelS

24. Mai 2007, 16:44

Hallo. Ich habe in meinen WordPress ordner eine htaccess datei und möchte das immer ein Slash angehängt wird. Meine Htaccess Datei sieht z.Z. so aus

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

kann ich da einfach
# Add trailing slash
RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L] dranhängen ? danke für den Artikel

Gravatar

12

Michael (Author)

25. Mai 2007, 19:46

Ja, sollte klappen. Am besten immer auf einer lokalen Installation testen.

Gravatar

13

marcel

9. Juni 2007, 17:13

irgendwie bin ich zu doof…

ich möchte gerne, dass bei Aufruf der Seite http://domain.org/ordner1/ordn.....ratung.php erscheint http://domain.org/beratung.htm

Warum klappt das nicht

Gravatar

14

butti

23. Juni 2007, 21:02

Wirklich guter Artikel – sowas brauch ich immer wieder.

Gravatar

15

Hasan

6. Juli 2007, 16:15

Wenn ich in die .htaccess Datei von WordPress den Code für das WWW einer Domain anhänge kommt folgender Fehler:

Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.

Meine Datei:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

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

Gravatar

16

Michael (Author)

9. Juli 2007, 23:00

@Hasan. Danke für die Aussage. Kommt da noch eine Frage oder wolltest Du das nur so bemerkt haben? :-)

Ich setze die Regeln grundsätzlich oberhalb vom WordPress-Abschnitt, damit sie vor diesem ausgeführt werden. Außerdem scheinen bei Dir ein paar Backslashes zu viel drin zu sein, vergleich das am besten mal mit dem Original. Wenn Du gar nicht weiterkommst, wendest Du Dich am besten an das oben verlinkte Forum.

Gravatar

17

tba

18. Juli 2007, 3:31

Geiler Artikel!
Bei der WordPress htaccess funktioniert es nur, wenn man die Regel an den Anfang setzt.

Gravatar

18

Wolke23

1. August 2007, 18:02

Über die WotR-Contest bin ich gerade auf diese Seite aufmerksam geworden. Insgesamt ein guter Überblick. Seltsam wirkt auf mich allerdings der Punkt „Geänderte Permalink-Struktur“:

Wir nehmen an, dass die Artikel-URL in einem Blog wie folgt aufgebaut ist: 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 domain.tld/blog/2007-01-31/artikel-titel/.

Bis auf den /blog/ sehe ich hier keinen Unterschied. Die klassische Variante wäre aber eher etwas mit ?=123 etc. Zumindest ist das ein Punkt, wo ich als Perl-Laie eine gute deutschsprachige Erklärung sinnvoll fände, um dies grundsätzlich nachvollziehen oder selbst basteln zu können. Oder gibt’s schon einen entsprechenden Artikel?

Gravatar

19

Michael (Author)

3. August 2007, 19:49

Wolke…, das ist nur ein Beispiel, Du kannst da im Prinzip beliebig die $1, $2, $3 und $4 anordnen.

Zum Thema des URL-Designs, also schöne URLs auszugeben, gehst Du am besten in’s Unterforum URL-Design von modrewrite.de, dort wird genau dieses Thema ausführlichst und immer wieder behandelt.

Gravatar

20

Michael

7. August 2007, 16:21

Hallo Michael,
erst mal vielen Dank für die Zusammenfassung. Hab es schon mehrmals als Nachschlagewerk benutzt.
Mir ist allerdings ein kleiner Fehler aufgefallen bei der Umleitung von domain.tld zu http://www.domain.tld
Bei Deinem Rule: RewriteRule ^(.*)$ http://www.domain.tld/$1 [R=301,L] erhalte ich immer zwei /, also domain.tld wird in http://www.domain.tld// umgewandelt.
Ich musste es folgendermaßen verändern, damit es bei mir funktioniert:
RewriteRule ^/(.*)$ http://www.domain.tld/$1 [R=301,L]
Alternativ kann man auch schreiben:
RewriteRule ^(.*)$ http://www.domain.tld$1 [R=301,L]
Dann hats bei mir geklappt.
Auf dem Server läuft Apache 2.2.3-4. Ich weiß allerdings nicht, ob sich die mod_rewrite.c zu Apache 1.3 irgendwie geändert hat.

Gravatar

21

Michael (Author)

8. August 2007, 22:13

Danke für den Hinweis, Michael.
Hmm, konnte ich jedoch jetzt nicht unter Apache 2.0.55 (Windows) reproduzieren…

Gravatar

22

efendi

14. August 2007, 12:28

Ich will mich den Vorrednern anschließen: Toller Artikel.

Durch unglückliche Zusammenhänge ist meine IP-Adresse in SUMAS zu finden. Immer gleiches Muster: 192.168.0.0/ordner/datei.html
Wie kann ich es nun bewerkstelligen, dass bei einem deratigen Aufruf domain.de/ordner/datei.html steht. Die Regel soll einfach die IP-Adresse gegen den Domainnamen tauschen, am besten mit einem 301’er.

Vielleicht kennt jemand einen Trick :)

Viele Grüße

Gravatar

23

Michael (Author)

14. August 2007, 21:58

Siehe oben unter „Weiterleitung einer Webseite einschließlich aller Unterseiten auf eine andere Domain (2)“ bzw. ggf. eine Abwandlung davon.
Wenn Du nicht weiterkommst, bitte am besten an das oben verlinkte Forum wenden.

Gravatar

24

Robert Hartl

22. August 2007, 4:36

Hallo Michael,

ich finde für eine bestimmte Konstellation keine Lösung.
Alt: domain.tld/ordner/
Neu: domain.tld/odner/ordnername/

Ich denke, die Problematik besteht darin, dass in der Ziel-URL (Neu) die alte URL mit enthalten ist.
Wenn Du einen Ansatz weißt, besten Dank.
Grüße
Robert

Gravatar

25

Michael (Author)

31. August 2007, 13:57

Hi Robert, ich würde sagen so was in der Art müsste klappen:
RewriteRule ^(.*)/$ /$1/ordnername/ [L,R=301]

Gravatar

26

Robert Hartl

31. August 2007, 14:12

Besten Dank, Michael

Gravatar

27

MUS

1. Oktober 2007, 23:00

Hi, ich habe die Umleitungsregel auf die www-Domain eingebaut – allerdings, wenn ich die Domain ohne www aufrufe, bleibt diese auch kontinuierlich bestehen im Browser – muss das so sein?

Gravatar

28

Michael (Author)

11. Oktober 2007, 23:52

MUS, nein, das ist nicht Sinn und Zweck ;)

Gravatar

29

Stefan

8. November 2007, 19:31

Tausend Dank – genau das habe ich eben gesucht!!!

Gravatar

30

Marc Klein - Webdesign

9. November 2007, 20:58

Nützliche Information. Werde diesen Blog öfter mal besuchen ;-)

Die Kommentarmöglichkeit ist derzeit für diesen Artikel ausgeschaltet.

Blog-Kategorien

Volltextsuche

Neueste Artikel

Neueste Kommentare

Neueste Trackbacks/Pingbacks

Andere Projekte

Blogparade

dient als zentrale Anlaufstelle für Blog-Paraden bzw. Blog-Karnevals und andere von BloggerInnen veranstaltete Aktionen.

Mediadaten

Feed-Statistik:
Feedburner

Software Guide gibt es seit Dezember 2005 und es werden durchschnittlich 4 Blog- Beiträge/Monat veröffentlicht. Die Themenschwerpunkte sind in der Tagcloud ersichtlich. Mehr Infos...

Links

 

Nach oben

Wordpress

© 2005-2016 Software Guide | ISSN 1864-9599