.htaccess


Von Thomas Bader (thomasb auf trash.net)


Was ist htaccess?

Mit Hilfe von htaccess kann man Vorgaben, die der Administrator des Servers gemacht hat, ändern. Das ist z.B. nützlich, wenn Ihr das Aussehen eines Verzeichnislistings ändern oder eine andere Dateieendung als SSI betrachten lassen wollt.
Dies funktioniert so: In einer Datei (normalerweise heisst sie '.htaccess') stehen die Änderungen. Diese Datei ist wiederum in einem Verzeichnis, sagen wir im mal 'A'. Wenn nun von einem Client die Anforderung kommt, er möchte das Verzeichnis 'A' vom Webserver, so liest der Apache die Datei '.htaccess' und führt die Änderungen durch. Dieses Verfahren ist vorallem dazu gedacht, das Benutzer Vorgaben für ihr 'public_html'-Verzeichnis ändern können. Auf Stinky könnt Ihr alle Vorgaben mit Hilfe von htaccess ändern.

Wichtig: Wenn Ihr eine Verzeichnisstruktur habt, z.B. so:

/home/heiri/public_html/A/B/C/D/

und dann die htaccess-Datei in das Verzeichnis 'public_html' tut, dann gelten die Änderungen auch in den Unterverzeichnissen A, B, C, und D. Es sei denn, in den Unterverzeichnissen hätte es auch eine htaccess-Datei, dann werden die Änderungen von dieser wieder aufgehoben.

Dies hier ist ein Beispiel für eine htaccess-Datei:

-------------------->>--------------------

Options +Includes +ExecCGI

DirectoryIndex startup.html

AddDescription "Ein tolles Bild." /home/thomasb/public_html/bild.jpg

AddDescription "Ein Bild." bild.jpg

AddEncoding x-gzip gz

AddEncoding x-compress Z

AddType image/jpeg jpg

AddType image/gif gif

AddIcon /icons/continued.gif ^^DIRECTORY^^

AddIcon /icons/unknown.gif ^^BLANKICON^^

AddIcon /icons/box1.gif *g*

AddIcon /icons/a.gif html

AddIconByEncoding /icons/box1.gif x-compress

ErrorDocument 404 /~tb/error/404.html

ErrorDocument 500 http://www.x.ch/errors/500.html

ErrorDocument 403 "Kein Zugriff.

--------------------<<---------------------

 

Wichtige Hinweise

In dieser FAQ hat es einige Begriffe, die nicht selbsterklärend sind, einige davon werde ich jetzt kurz erklären:

Pfad, absolut vom root-Verzeichnis (oder Wurzelverzeichnis) des Servers aus:

Wenn Ihr auf stinky eingeloggt seid, dann ist das Verzeichnis / das root-Verzeichnis (Wurzelverzeichnis) des Servers. Ein absoluter Pfad vom root-Verzeichnis aus gesehen wäre z.B.:

/home/thomasb/public_html/Linux

Pfad, absolut vom DocumentRoot des Webservers

Wenn Ihr zum Beispiel folgendes Dokument anfordert

http://www.trash.net/users/index.html

Dann ist ist der Pfad absolut vom DocumentRoot des Webservers aus gesehen

/users/index.html

Pfad, relativer

Ein relativer Pfad ist immer vom aktuellen Standort aus gesehen. Wenn Ihr im Verzeichnis

/temp/files/download/

seid und dann einen relativen Pfad angebt, z.B.:

programm/source/

dann wird das als

/temp/files/download/programm/source/

interpretiert. Einen relativen Pfad erkennt man immer daran, dass er keinen Slash (/) am Anfang hat.

Ändern der htaccess-Datei

Wie bereits erwähnt, heisst die htaccess-Datei normalerweise .htaccess. Ihr könnt dies aber auch ändern:

AccessFileName .datei

Damit wird in allen Unterverzeichnissen die Datei .datei als htaccess-Datei verwendet. Ihr könnt auch mehrere Dateien angeben:

AccessFileName .datei .datei2

So werden die beiden Dateien .datei und .datei2 als htaccess-Datei verwendet. Ihr solltet allerdings wissen was Ihr tut, wenn Ihr diese Option ändern wollt, da das Ändern dieser Option u.U. schlimme Auswirkungen haben kann.

Ändern der Standardseite

Mittels htaccess könnt Ihr die Standardseite eurer Seite ändern. Die Standardseite ist die Seite, die angezeigt wird, wenn jemand bloss einen Verzeichnisnamen angibt, z.B. http://www.trash.net/~thomasb/. Wie man sehen kann, ist hier keine HTML-Seite angegeben. Der Webserver schickt in diesem Fall einfach die Standardseite.

Mit folgender Zeile in der .htaccess-Datei könnt Ihr das Standarddokument ändern:

DirectoryIndex index.html default.html start.shtml

Falls jetzt jemand einfach einen Verzeichnisnamen angibt, versucht der Webserver zuerst die Datei index.html an den Client zu schicken. Falls die Datei index.html nicht vorhanden ist, wird einfach die nächste Datei (in diesem Fall default.html) an den Client geschickt. Wenn diese auch nicht vorhanden ist, so kommt die nächste dran usw. Erst wenn die Liste abgearbeitet ist, sendet der Webserver einer Verzeichnislisting an den Client. Selbstverständlich kann man hier beliebige Dateinamen einfügen und die Liste darf auch beliebig lang sein.

Eigene Fehlermeldungen spezifizieren

Im HTTP-Standard sind verschiedene Fehlermeldungen spezifiziert. Falls ein Fehler auftritt, sendet der Webserver den Fehlercode zusammen mit einer Fehlermeldung an den Client. Die Fehlermeldung ist meistens eine HTML-Seite, auf der erklärt wird, was genau für ein Fehler aufgetreten ist. Normalerweise wird diese HTML-Seite von dem Webserver automatisch generiert, doch man kann diese Seiten auch selber schreiben. Doch zuerst muss man wissen, was für Fehlermeldungen es gibt:

HTTP-Error 404

Bei diesem Fehler wurde die Datei, die der Client anfordern wollte nicht gefunden. Sie ist entweder nicht vorhanden, wurde gelöscht oder verschoben. Es ist aber auch möglich, dass sich der Benutzer des Clients vertippt hat :-).

HTTP-Error 500

Dies ist der "Internal Server Error". Er kann durch folgende Dinge hervorgerufen werden:

- Fehlkonfiguration des Webservers

- Schreibfehler in der htaccess-Datei

- Ein CGI-Skript funktioniert nicht richtig

HTTP-Error 403

Dieser Fehler entsteht, wenn Dir jemand nicht erlaubt auf ein Verzeichnis oder eine Datei zuzugreifen.

Jetzt kennst Du die Fehlercodes der verschiedenen Fehlermeldungen. Jetzt kannst Du mittels htaccess eigene Fehlermeldungen basteln. Es gibt verschiedene Typen:

- Plain Text

Bei diesem Typ von Fehlermeldung wird dem Client einfacher ASCII-Text gesendet. So lautet der Syntax in der htaccess-Datei:

ErrorDocument xxx "Ein Fehler ist aufgetreten. Bitte starten sie ihren Browser neu.

Den String xxx müsst Ihr noch durch den Fehlercode des HTTP-Errors ersetzen (siehe oben). Beachtet ausserdem: Das Anführungszeichen ist hier nicht nicht geschlossen. Dies ist kein Schreibfehler, es muss tatsächlich so sein.

- lokale Weiterleitungen

Bei diesem Typ von Fehlermeldung wird dem Client eine andere Seite auf dem Webserver geschickt. So lautet der Syntax in der htaccess-Datei:

ErrorDocument xxx /~thomasb/errors/404.html

Den String xxx müsst Ihr noch durch den Fehlercode des HTTP-Errors ersetzen. Ausserdem müsst Ihr beachten, dass ihr keinen relativen Pfad einsetzt. Selbstverständlich könnt Ihr auch auf ein CGI-Skript verweisen.

- externe Weiterleitungen

 

ErrorDocument xxx http://www.trash.net/~thomasb/errors/xxx.html

Verschiedene Optionen

In der htaccess-Datei können noch weitere Optionen konfiguriert werden. Dafür gibt es den Options-Befehl, dem die gewünschten Optionen übergeben werden können, z.B. so:

Options +ExecCGI -Indexes

In diesem Beispiel wird die Option ExecCGI hinzugefügt (deshalb auch das "+") und die Option Indexes entfernt (deshalb auch das "-"). Man kann beliebig viele Optionen hinzufügen oder entfernen. Hier eine Übersicht über die möglichen Optionen:

ExecCGI

Damit kann gesteuert werden, ob in den betreffenden Verzeichnissen CGI-Scripts ausgeführt werden dürfen.

Includes

Hiermit kann die Verwendung von "Server Side Includes" gesteuert werden. Mit +Includes werden SSI-Dokumente geparst, mit -Includes werden sie nicht.

IncludesNOEXEC

Hiermit kann gesteuert werden, ob die #exec und #include Tags in SSI-Dokumenten beachtet werden sollen, sprich ob SSI-Seiten CGI-Skripts starten können oder nicht..

Indexes

Wenn ein Client die Anfrage nach einem Verzeichnis raussendet (also die URL http://www.trash.net/~thomasb/) und in diesem Verzeichnis keine Standardseite (zur Konfiguration der Standardseite) vorhanden ist, so sendet der Webserver einfach eine Auflistung der in dem Verzeichnis vorhandenen Daten. Mit der Indexes-Option könnt Ihr steuern, ob Ihr dies erlauben wollt. Mit

Options -Indexes

sendet der Webserver kein Verzeichnislisting sondern gibt dann den HTTP-Error 403 aus, mit

Options +Indexes

sind Verzeichnislistings erlaubt.

FancyIndexing

Mit FancyIndexing ist es möglich, dem Verzeichnislisting, dass der Webserver erzeugt wenn keine Standardseite vorhanden ist (zur Konfiguration der Standardseite) ein anderes Aussehen zu Verpassen. Zuerst müsst Ihr jedoch FancyIndexing anschalten. Dies geschieht mit folgender Zeile in der htaccess-Datei:

FancyIndexing On

Nun habt Ihr viele Optionen um das Verzeichnislisting zu steuern:

AddDescription

Mit folgender Zeile könnt Ihr erreichen, dass im Verzeichnislisting neben dem Dateinamen eine Beschreibung auftaucht:

AddDescription "Dies ist ein Bild" bild.jpg

Jetzt erscheint im Verzeichnislisting neben jeder Datei, die "bild.jpg" heisst die Beschreibung "Dies ist ein Bild". Beschreibungen, die Ihr festgelegt habt, gelten für alle Unterverzeichnisse.

Natürlich könnt Ihr auch einen absoluten Pfad angeben, falls Ihr nur einer bestimmten Datei die Beschreibung zuordnern wollt:

AddDescription "Dies ist ein neues Bild" /home/thomasb/public_html/bild.jpg

Dann erscheint die Beschreibung "Dies ist ein neues Bild" nur bei der Datei "/home/thomasb/public_html/bild.jpg" und nicht bei anderen Dateien, die auch "bild.jpg" heissen. Hinweis: Der absolute Pfad muss vom Wurzelverzeichnis des Servers ausgehen.

Selbstverständlich können im Dateinamen auch Wildcards eingesetzt werden ("*" und "?").

AddEncoding

Diese Einstellmöglichkeit mappt eine Dateiendung zu einem spezifizierten MIME-Encoding-Typ:

AddEncoding x-gzip gz AddEncoding x-compress Z

Die hier aufgeführten sollten die gebräuchlichsten sein. Natürlich könnt Ihr auch andere MIME-Encoding-Typen spezifieren, der Syntax von Encoding lautet:

AddEncoding "Typ" "Dateiendung ohne Punkt"

AddType

Mit dieser Einstellmöglichkeit könnt Ihr MIME-Typen auf Dateiendungen mappen. Der Syntax sieht folgendermassen aus:

AddType "MIME-Type" "Dateiendung ohne Punkt"

Für den String MIME-Type könnt Ihr einen beliebigen MIME-Type angeben, z.B. text/plain. Dateiendung ohne Punkt müsst Ihr durch die Dateiendung ersetzen. Bsp: Wenn Ihr eine Datei trash.txt habt, dann ist die Dateiendung txt. Beachtet bitte, dass Ihr die Dateiendung ohne Punkt angeben müsst. Ein gültiger Eintrag könnte so aussehen:

AddType text/plain txt

AddIcon

Hiermit könnt Ihr die Icons, die im Verzeichnislisting für jede Datei angezeigt werden, verändern. Es gibt viele Möglichkeiten, diese Bildchen zu verändern. Hier folgt ein Beispiel, wie Ihr einer bestimmten Endung eine bestimmtes Bildchen zuweisen könnt:

AddIcon /icons/box1.gif html

So wird bei jeder Datei, die die Endung html hat, das Bild /icons/box1.gif angezeigt. Der absolute Pfad zum Bild geht hier vom DocumentRoot des Webservers aus. Ihr könnt natürlich auch den Pfad zum Bild relativ angeben. Da dies jedoch spezielle Vorkommnisse erfordert, wird an dieser Stelle nicht weiter daraufeingegangen.

Ihr könnt natürlich nicht nur Icons an speziellen Dateiendungen vergeben, Ihr könnt dabei auch eine Datei benennen:

AddIcon /icons/box1.gif heiri.html

So enthält jede Datei, die den Namen heiri.html hat als Icon die Datei /icons/box1.gif. Falls genau eine bestimmte Datei ein spezielles Icon erhalten soll, so müsst Ihr den Pfad der Datei absolut, vom Wurzelverzeichnis des Server gesehen angeben, z.B. so:

AddIcon /icons/box1.gif /home/thomasb/public_html/heiri.html

So wird das Icon /icons/box1.gif der Datei /home/thomasb/public_html/heiri.html zugewiesen. Auch hier wird für das Icon der Pfad absolut vom DocumentRoot des Webservers genommen. Doch dies ist noch längst nicht alles: Es ist auch möglich, einem Verzeichnis ein eigenes Bildchen zu geben:

AddIcon /icons/box1.gif ^^DIRECTORY^^

Der String ^^DIRECTORY^^ steht für Verzeichnis. So wird jedem Verzeichnis das Icon /icons/box1.gif verliehen. Ihr könnt auch das Icons, dass links-oben im Verzeichnislisting angezeigt wird ändern:

AddIcon /icons/box1.gif ^^BLANKICON^^

^^BLANKICON^^ steht Stellvertretend für obengenanntes Icon.

Doch dies ist noch lange nicht alles, Ihr könnt auch Wildcards benutzen:

AddIcon /icons/box1.gif g*.html

Damit weist Ihr jeder Datei, die mit g beginnt und als Endung .html hat das Icons /icons/box1.gif zu. Es gibt noch weitere Möglichkeiten:

Allen Dateien, die den Buchstaben g enthalten, das Icon /icons/box1.gif zuweisen:

AddIcon /icons/box1.gif *g*

Allen Dateien, die mit einem beliebigen Buchstaben beginnen und mit -buchstabe aufhören das Icon /icons/box1.gif zuweisen:

AddIcon /icons/box1.gif ?-buchstabe

AddIconByEncoding

Hiermit könnt Ihr Icons nach dem MIME-Encoding-Type zuweisen (zur Konfiguration von Encoding):

AddIconByEncoding /icons/box1.gif x-compress

Hiermit wird allen Dateien, die den MIME-Encoding-Type x-compress haben, das Icon /icons/box1.gif zugewiesen. Wichtig: Der MIME-Encoding-Type muss zuerst spezifiert worden sein (dies geschieht mit dem Befehl Encoding, siehe oben).

AddIconByType

Hiermit könnt Ihr Icons nachem dem MIME-Typ zuweisen (zur Konfiguration von AddType). Beachtet aber, dass der MIME-Typ definiert sein muss. Bsp:

AddIconByType /icons/box1.gif text/html

So wird allen Dateien, die den MIME-Type text/html haben, das Icon /icons/box1.gif zugewiesen. Bei der Angabe des MIME-Types könnt Ihr auch Wildcards verwenden:

AddIconByType /icons/box1.gif text/*

So weist Ihr allen Dateien, die dem MIME-Typ text/* entsprechen das Icon /icons/box1.gif zu. Das "*" entspricht einem beliebigen Text.

DefaultIcon

Mit der Variable DefaultIcon könnt Ihr den Dateien, für die kein Icon zugewiesen worden ist, ein Standardicon festlegen:

DefaultIcon /icons/box1.gif

So wird allen Dateien, für die nicht explizit ein Icon zugewiesen worden ist, das Icon /icons/box1.gif zugewiesen. Der Pfad zum Icon muss absolut, vom DocumentRoot des Webservers aus gesehen, sein.

HeaderName

Bei dem Verzeichnislisting wird normalerweise im oberen Teil der aktuelle Pfad angeben. Mit der Variable HeaderName könnt Ihr dort auch etwas anderes anzeigen. Die nach HeaderName spezifizierte Datei wird am Anfang des Verzeichnislistings angezeigt.

HeaderName HEADER

Falls jetzt ein Verzeichnislisting angezeigt wird, und in dem betreffenden Verzeichnis befindet sich die Datei HEADER, so wird diese am Anfang des Listings angezeigt. Falls sich in dem betreffenden Verzeichnis keine in HeaderName aufgeführte Datei befindet, so wird das normale Verzeichnislisting angezeigt. Ihr könnt nur eine Datei in HeaderName spezifizieren.

ReadmeName

Dies ist das Gegenteil zu obengenanntem HeaderName. Der Inhalt dieser Datei wird beim Verzeichnislisting anstelle der Serversignatur angezeigt. Und so könnt Ihr das verwenden:

ReadmeName README

Sie wird das Dokument README im unteren Teil des Verzeichnislistings angezeigt. Was noch zu beachten ist: Falls es die Datei "README.HTML" gibt, wird diese anstelle der Datei README verwendet.

IndexIgnore

Hier könnt Ihr Dateien auflisten, die nicht im Verzeichnislisting erscheinen sollen. Ihr könnt ganze Dateinamen, Endungen von Dateien und Wildcards verwenden.

IndexIgnore README .htaccess *~

In diesem Beispiel werden folgende Dateien nicht aufgelistet: Alle Dateien, die README heissen, alle Dateien, die .htaccess heissen und alle Dateien, die am Schluss eine Tilde (~) enthalten.

Standardmässig werden alle Dateien ignoriert, die mit einem Punkt beginnen.

Anderes Beispiel:

IndexIgnore /..

Mit dieser Anweisung wird kein Link zum übergeordneten Verzeichnis generiert.

IndexOptions

Hiermit kann man das Aussehen des Verzeichnislistings sehr stark beeinflussen. Dies hier ist ein Beispiel:

IndexOptions IconHeight=60 IconWidth=35 IconsAreLinks ScanHTMLTitle

Dieser Befehl kennt mehrere Optionen, die ich hier nun kurz vorstellen werde:

IconHeight=[Wert in Pixel]

Hiermit könnt Ihr Höhe, die die Icons neben den Dateinamen haben ändern. Direkt hinter dem IconHeight= müsst Ihr die gewünschte Höhe angeben, in Pixel (Keinen Leerschlag machen!). Beachtet bitte, dass wenn ihr die Höhe spezifiziert, dass Ihr dann auch die Breite spezifizieren müsst, das der Webserver diese Option sonst ignoriert.

IconWidth=[Wert in Pixel]

Hier könnt Ihr die Breite der Icons, die neben dem Dateinamen im Verzeichnislisting erscheinen, ändern. Setzt einfach den Wert in Pixel direkt neben IconWidth= (Keinen Leerschlag machen!). Beachtet, dass wenn Ihr die Breite eines Icons spezifiziert, dass Ihr dann auch die Höhe angeben müsst, da der Webserver sonst die Angabe ignoriert.

IconsAreLinks

Damit befiehlt Ihr dem Webserver, dass er die Icons als Link auf die betreffende Datei darstellen soll.

NameWidth=[n*]

Hiermit legt Ihr die Breite der Spalte der Dateinamen festlegen. Falls Ihr einen bestimmten Wert bestimmen wollt, müsst Ihr diesen als Bytes angeben (1 Buchstabe = 1 Byte), z.B.:

NameWidth=5

legt fest, dass die Spalte für den Dateinamen 5 Zeichen breit sein soll. Als Wert könnt Ihr auch ein "*" einsetzen, dann wird die Spaltenbreite aus dem längsten Dateinamen bestimmt.

ScanHTMLTitles

Mit dieser Option könnt Ihr dem Webserver befehlen, die HTML-Seiten-Titel jeder HTML-Seite auszulesen und in der Spalte "Description" anzuzeigen. Bitte beachtet, das diese Option sehr CPU- und Festplattenbelastend ist.

SuppressColumnSorting

Mit dieser Option könnt Ihr verhindern, dass die beim Verzeichnislisting normalerweise als Links dargestellten Tabellenüberschriften (z.B. "Name" oder "Size") als Links angezeigt werden.

SuppressDescription

Damit könnt Ihr die Beschreibung im Verzeichnislisting ausblenden.

SuppressLastModified

Damit könnt Ihr verhindern, dass im Verzeichnislisting angezeigt wird, wann die Datei zuletzt geändert wurde.

SuppressSize

Damit wird die Dateigrösse im Verzeichnislisting ausgeblendet.

IndexOrderDefault

Hiermit könnt Ihr die Sortierreihenfolge des Verzeichnislistings angeben. Normalerweise wird es alphabetisch nach dem Dateinamen sortiert. Dieser Befehl erwartet zwei Angaben, n‹ämlich ob aufsteigend ("Ascending") oder absteigend ("Descending") sortiert werden soll und was als Kriterium gelten soll. Gültige Kriterien sind:

  • "Name" (Dateiname),
  • "Size" (Dateigrösse),
  • "Date" (Datum der letzten Änderung) und
  • "Description" (Beschreibung).

Bsp: Wenn Ihr das Listing nach Dateinamen aufsteigend sortieren wollt:

IndexOrderDefault Ascending Name

AddAlt

Beim Verzeichnislisting hat es neben jeder Datei ein Icon. Die Beschriftung dieses Icons entspricht normalerweise dem Dateityp. Mit der Direktive "AddAlt" könnt Ihr den Inhalt der Beschriftung des Icons ‹ändern:

AddAlt "Ich bin eine Datei" datei.gif

In diesem Beispiel wird dem Icon der Datei datei.gif als Beschriftung Ich bin ein Datei gegeben. Die Beschriftung muss zwischen Anführungs- und Schlusszeichen stehen. Anstelle eines Dateinamens könnt Ihr auch Wildcards angeben:

AddAlt "Beschriftung" abc*.html

In diesem Beispiel wird allen HTML-Dateien, die mit abc beginnen die Beschriftung Beschriftung zugewiesen. Ihr könnt auch Dateiendungen angeben:

AddAlt "Bild" jpg

So erhalten alle Icons der Dateien, die die Endung jpg aufweisen die Beschrifung Bild. Beachtet aber, dass dann auch das Icon einer Datei namens jpg die Beschriftung Bild bekommt.

AddAltByEncoding

So könnt Ihr allen Dateien, die einem bestimmten Encodingtyp zugeordnet sind, eine Beschriftung verleihen. Um zum Beispiel allen Icons der Dateien, die dem Encodingtyp x-gzip angehören die Beschriftung Test zugeben, müsst Ihr folgende Zeile verwenden:

AddAltByEncoding "Test" x-gzip

Auch hier muss die Beschriftung zwischen Anführungs- und Schlusszeichen stehen.

AddAltByTyp

Hiermit kann den Icons der Dateien, die einem bestimmten Mime-Typ angehören, eine neue Beschriftung gegeben werden. Als Beispiel: Um allen Icons der Dateien, die dem Mime-Type text/plain angehören, die Beschriftung Dies ist Plaintext zu geben, müsst Ihr folgende Zeile in eure htaccess-Datei hinzufügen:

AddAltByType "Dies ist Plaintext" text/plain

Auch hier muss die Beschriftung zwischen Anführungs- und Schlusszeichen stehen.

Passwortschützen von Verzeichnissen

Mit htaccess könnt Ihr natürlich auch Verzeichnisse passwortschützen. Dazu benötigt Ihr zuerst eine Passwortdatei. Am besten ist es, wenn Ihr die in das Verzeichnis html_auth in eurem Heimatverzeichnis speichert. Die Datei wird mit dem Programm htpasswd erzeugt:

user@stinky:~> htpasswd -c /home/user/html_auth/htpasswd user

So wird eine Passwortdatei erzeugt und der Benutzername user hinzugefügt. Du musst nun zweimal das Passwort für den Benutzername user eingeben. Du kannst selbstverständlich auch einen anderen Dateinamen oder Benutzernamen wählen, dies hier soll nur ein Beispiel sein.

Du kannst auch andere Benutzernamen hinzufügen:

user@stinky:~> htpasswd /home/user/html_auth/htpasswd user2

Hier wird die Option -c weggelassen, dies ist auch wichtig, da Du sonst die alte Datei vollständig überschreiben würdest!. Du kannst neben einer Passwortdatei auch eine Gruppendatei erstellen. Diese hat folgendes Format:

my-users: hans jakob heiri lisbeth

So wird definiert, dass die Benutzer hans, jakob, heiri und lisbeth der Gruppe my-users angehören. Hierbei ist wichtig, dass die genannten Benutzer auch in Deiner Passwortdatei vorkommen müssen. Du kannst auch mehrere Gruppen spezifizieren, benutze dabei für jede Gruppe eine Zeile!. Du kannst diese Datei dann auch in Deinem html_auth-Verzeichnis speichern, z.B. mit dem Dateinamen htgroups

Wenn Du die Passwortdatei erstellt hast, so kannst Du nun die .htaccess-Datei erstellen. Sie sollte in dem Verzeichnis sein, dass Du schützen willst und folgende Zeilen enthalten:

AuthType Basic

AuthName "A secret Place"

AuthUserFile /home/user/html_auth/htpasswd

AuthGroupFile /home/user/html_auth/htgroups

require valid-user

Der Text hinter AuthName gibt dem Bereich einen Namen, den sich der Browser merken kann (er muss dann nicht bei jedem Reload nach dem Passwort fragen). AuthUserFile erwartet den vollen Pfad zu Deiner Passwortdatei, und AuthGroupFile erwartet den vollen Pfad zu einer Gruppendatei. Falls Du keine hast, so gib /dev/null an. require regelt schliesslich, welche Bedingung eintreffen muss, damit der Bereich geöffnet wird:

  • valid-user (der Benutzer muss in der Passwortdatei vorkommen)
  • user hans (nur der Benutzer hans wird zugelassen
  • user hans heiri (nur die Benutzer hans und heiri werden zugelassen
  • group my-users (alle Mitglieder der Gruppe my-users werden zugelassen

Du kannst ohne Probleme mehrere require-Bedingungen einbauen.

Die <Limit>-Option

Mit der <Limit>-Option könnt Ihr steuern, wer die HTTP-Befehle GET, PUT, POST ausführen kann und wer nicht. Beispiel:

<Limit GET>
	Order allow,deny
	Allow from all
	Deny from none
</Limit>
<Limit POST,PUT>
	Order deny,allow
	Deny from all
	Allow from .ch
</Limit>

In diesem Beispiel können alle die Seiten anschauen (GET), aber nur Hosts, deren Hostname mit .ch aufhört können die Befehle PUT und POST machen. Ihr könnt die Befehle Order, Allow und Deny auch für alle Befehle gültig machen, indem Ihr sie nicht innerhalb eines <Limit>-Bereiches gebraucht:

Order deny,allow

Deny from .konkurrenz.com

Deny from center.bluewin.ch

Deny from 192.168

Allow from all

Hier wird der Zugriff für alle Host aus der Domain konkurrenz.com gesperrt. Auch der Host center.bluewin.ch darf nicht zugreifen. Alle Zugriffe eines Rechner, dessen IP mit 192.168 beginnt, werden auch gesperrt. Alle anderen Rechner dürfen auf die Seiten zugreifen.

Der Befehl Order legt fest, in welcher Reihenfolge die Befehle Allow und Deny ausgewertet werden.

Ein anderes Beispiel:

AuthType Basic
AuthName A secret Place
AuthUserFile /home/user/html_auth/htpasswd
AuthGroupFile /home/user/html_auth/htgroups
<Limit GET>
	Order Allow,Deny
	Allow from all
	Deny from none
</Limit>
<Limit PUT POST>
	Order Allow,Deny
	Allow from .ch
	Deny from all
	require valid-user
</Limit>

Alle dürfen die Seiten anschauen (GET). Die Befehle PUT und POST dürfen nur Rechner ausführen, deren Hostname mit .ch aufhört und die zusätzlich noch den Benutzernamen und das dazugehörige Passwort aus der Passwortdatei kennen.

Links zum Thema

Hier sind einige Links, die sich mit dem Thema htaccess befassen:

Feedback

Diese Seite ist völlig neu, ich wäre sehr froh, wenn Ihr mir Kommentare, Fehlerberichte, einfach alles zusenden könntet. Meine eMailadresse ist:

thomasb auf trash.net