einfuehrung-htaccess.php


Quell Code


        <h2>Was ist htaccess?</h2>
        <p>Mit Hilfe von <em>htaccess</em> 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. <br /> 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 trash.net könnt Ihr alle Vorgaben mit Hilfe von <em>htaccess</em> ändern.</p>
        <p><strong>Wichtig:</strong> Wenn Ihr eine Verzeichnisstruktur habt, z.B. so:</p>
        <blockquote><code>/home/heiri/public_html/A/B/C/D/</code></blockquote>
        <p>und dann die <em>htaccess</em>-Datei in das Verzeichnis <code>'public_html'</code> tut, dann gelten die Änderungen auch in den Unterverzeichnissen <code>A, </code><code>B, </code><code>C, </code>und <code>D</code>. Es sei denn, in den Unterverzeichnissen hätte es auch eine <em>htaccess</em>-Datei, dann werden die Änderungen von dieser wieder aufgehoben.</p>
        <p>Dies hier ist ein Beispiel für eine <em>htaccess</em>-Datei:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>
                        <p>--------------------&gt;&gt;--------------------</p>
                        <p>Options +Includes +ExecCGI</p>
                        <p>DirectoryIndex startup.html</p>
                        <p>AddDescription "Ein tolles Bild." /home/thomasb/public_html/bild.jpg</p>
                        <p>AddDescription "Ein Bild." bild.jpg</p>
                        <p>AddEncoding x-gzip gz</p>
                        <p>AddEncoding x-compress Z</p>
                        <p>AddType image/jpeg jpg</p>
                        <p>AddType image/gif gif</p>
                        <p>AddIcon /icons/continued.gif ^^DIRECTORY^^</p>
                        <p>AddIcon /icons/unknown.gif ^^BLANKICON^^</p>
                        <p>AddIcon /icons/box1.gif *g*</p>
                        <p>AddIcon /icons/a.gif html</p>
                        <p>AddIconByEncoding /icons/box1.gif x-compress</p>
                        <p>ErrorDocument 404 /~tb/error/404.html</p>
                        <p>ErrorDocument 500 http://www.x.ch/errors/500.html</p>
                        <p>ErrorDocument 403 "Kein Zugriff.</p>
                        <p>--------------------&lt;&lt;---------------------</p>
                    </td>
                </tr>
            </tbody>
        </table>
        <p> </p>
        <h2>Wichtige Hinweise</h2>
        <p>In dieser FAQ hat es einige Begriffe, die nicht selbsterklärend sind, einige davon werde ich jetzt kurz erklären:</p>
        <blockquote><strong>Pfad, absolut vom root-Verzeichnis (oder Wurzelverzeichnis) des Servers aus:</strong>
            <p>Wenn Ihr auf access1/2 eingeloggt seid, dann ist das Verzeichnis <em>/</em> das root-Verzeichnis (Wurzelverzeichnis) des Servers. Ein absoluter Pfad vom root-Verzeichnis aus gesehen wäre z.B.:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>/home/thomasb/public_html/Linux</td>
                    </tr>
                </tbody>
            </table>
            <br /> <strong>Pfad, absolut vom DocumentRoot des Webservers</strong>
            <p>Wenn Ihr zum Beispiel folgendes Dokument anfordert</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>http://www.trash.net/users/index.html</td>
                    </tr>
                </tbody>
            </table>
            <p>Dann ist ist der Pfad absolut vom DocumentRoot des Webservers aus gesehen</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>/users/index.html</td>
                    </tr>
                </tbody>
            </table>
            <br /> <strong>Pfad, relativer</strong>
            <p>Ein relativer Pfad ist immer vom aktuellen Standort aus gesehen. Wenn Ihr im Verzeichnis</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>/temp/files/download/</td>
                    </tr>
                </tbody>
            </table>
            <p>seid und dann einen relativen Pfad angebt, z.B.:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>programm/source/</td>
                    </tr>
                </tbody>
            </table>
            <p>dann wird das als</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>/temp/files/download/programm/source/</td>
                    </tr>
                </tbody>
            </table>
            <p>interpretiert. Einen relativen Pfad erkennt man immer daran, dass er <strong>keinen</strong> Slash (/) am Anfang hat.</p>
        </blockquote>
        <h2>Ändern der <em>htaccess</em>-Datei</h2>
        <p>Wie bereits erwähnt, heisst die <em>htaccess</em>-Datei normalerweise <em>.htaccess</em>. Ihr könnt dies aber auch ändern:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>AccessFileName .datei</td>
                </tr>
            </tbody>
        </table>
        <p>Damit wird in allen Unterverzeichnissen die Datei <em>.datei</em> als <em>htaccess</em>-Datei verwendet. Ihr könnt auch mehrere Dateien angeben:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>AccessFileName .datei .datei2</td>
                </tr>
            </tbody>
        </table>
        <p>So werden die beiden Dateien <em>.datei</em> und <em>.datei2</em> als <em>htaccess</em>-Datei verwendet. Ihr solltet allerdings wissen was Ihr tut, wenn Ihr diese Option ändern wollt, da das Ändern dieser Option u.U.
            <strong>schlimme Auswirkungen</strong> haben kann.</p>
        <h2><a name="aendernderstandardseite"></a>Ändern der Standardseite</h2>
        <p>Mittels <em>htaccess</em> könnt Ihr die Standardseite eurer Seite ändern. Die Standardseite ist die Seite, die angezeigt wird, wenn jemand bloss einen Verzeichnisnamen angibt, z.B. <a href="http://www.trash.net/%7Ethomasb/">http://www.trash.net/~thomasb/</a>. Wie man sehen kann, ist hier keine HTML-Seite angegeben. Der Webserver schickt in diesem Fall einfach die Standardseite.</p>
        <p>Mit folgender Zeile in der <em>.htaccess</em>-Datei könnt Ihr das Standarddokument ändern:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>DirectoryIndex index.html default.html start.shtml</td>
                </tr>
            </tbody>
        </table>
        <p>Falls jetzt jemand einfach einen Verzeichnisnamen angibt, versucht der Webserver zuerst die Datei <em>index.html</em> an den Client zu schicken. Falls die Datei <em>index.html</em> nicht vorhanden ist, wird einfach die nächste Datei (in diesem Fall <em>default.html</em>) 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.</p>
        <h2>Eigene Fehlermeldungen spezifizieren</h2>
        <p>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:</p>
        <blockquote>
            <p><strong>HTTP-Error 404</strong></p>
            <p>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 :-).</p>
            <p><strong>HTTP-Error 500</strong></p>
            <p>Dies ist der "Internal Server Error". Er kann durch folgende Dinge hervorgerufen werden:</p>
            <blockquote>
                <p>- Fehlkonfiguration des Webservers</p>
                <p>- Schreibfehler in der <em>htaccess</em>-Datei</p>
                <p>- Ein CGI-Skript funktioniert nicht richtig</p>
            </blockquote>
            <p><strong>HTTP-Error 403</strong></p>
            <p>Dieser Fehler entsteht, wenn Dir jemand nicht erlaubt auf ein Verzeichnis oder eine Datei zuzugreifen.</p>
        </blockquote>
        <p>Jetzt kennst Du die Fehlercodes der verschiedenen Fehlermeldungen. Jetzt kannst Du mittels <em>htaccess</em> eigene Fehlermeldungen basteln. Es gibt verschiedene Typen:</p>
        <blockquote>
            <p><strong>- Plain Text</strong></p>
            <p>Bei diesem Typ von Fehlermeldung wird dem Client einfacher ASCII-Text gesendet. So lautet der Syntax in der <em>htaccess</em>-Datei:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>ErrorDocument xxx "Ein Fehler ist aufgetreten. Bitte starten sie ihren Browser neu.</td>
                    </tr>
                </tbody>
            </table>
            <p>Den String <em>xxx</em> müsst Ihr noch durch den Fehlercode des HTTP-Errors ersetzen (siehe oben). Beachtet ausserdem: Das Anführungszeichen ist hier <strong>nicht</strong> nicht geschlossen. Dies ist kein Schreibfehler, es muss tatsächlich so sein.</p>
            <p><strong>- lokale Weiterleitungen</strong></p>
            <p>Bei diesem Typ von Fehlermeldung wird dem Client eine andere Seite auf dem Webserver geschickt. So lautet der Syntax in der <em>htaccess</em>-Datei:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>ErrorDocument xxx /~thomasb/errors/404.html</td>
                    </tr>
                </tbody>
            </table>
            <p>Den String <em>xxx</em> müsst Ihr noch durch den Fehlercode des HTTP-Errors ersetzen. Ausserdem müsst Ihr beachten, dass ihr <strong>keinen</strong> relativen Pfad einsetzt. Selbstverständlich könnt Ihr auch auf ein CGI-Skript verweisen.</p>
            <p><strong>- externe Weiterleitungen</strong></p>
            <p> </p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>ErrorDocument xxx http://www.trash.net/~thomasb/errors/xxx.html</td>
                    </tr>
                </tbody>
            </table>
        </blockquote>
        <h2>Verschiedene Optionen</h2>
        <p>In der <em>htaccess-Datei</em> können noch weitere Optionen konfiguriert werden. Dafür gibt es den <em>Options</em>-Befehl, dem die gewünschten Optionen übergeben werden können, z.B. so:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>Options +ExecCGI -Indexes</td>
                </tr>
            </tbody>
        </table>
        <p>In diesem Beispiel wird die Option <em>ExecCGI</em> hinzugefügt (deshalb auch das "+") und die Option
            <em>Indexes</em> entfernt (deshalb auch das "-"). Man kann beliebig viele Optionen hinzufügen oder entfernen. Hier eine Übersicht über die möglichen Optionen:</p>
        <blockquote><strong>ExecCGI</strong>
            <p>Damit kann gesteuert werden, ob in den betreffenden Verzeichnissen CGI-Scripts ausgeführt werden dürfen.</p>
            <strong>Includes</strong>
            <p>Hiermit kann die Verwendung von "Server Side Includes" gesteuert werden. Mit <em>+Includes</em> werden SSI-Dokumente geparst, mit <em>-Includes</em> werden sie nicht.</p>
            <strong>IncludesNOEXEC</strong>
            <p>Hiermit kann gesteuert werden, ob die <em>#exec</em> und <em>#include</em> Tags in SSI-Dokumenten beachtet werden sollen, sprich ob SSI-Seiten CGI-Skripts starten können oder nicht..</p>
            <strong>Indexes</strong>
            <p>Wenn ein Client die Anfrage nach einem Verzeichnis raussendet (also die URL http://www.trash.net/~thomasb/) und in diesem Verzeichnis keine Standardseite (<a href="#aendernderstandardseite">zur Konfiguration der Standardseite</a>) vorhanden ist, so sendet der Webserver einfach eine Auflistung der in dem Verzeichnis vorhandenen Daten. Mit der <em>Indexes</em>-Option könnt Ihr steuern, ob Ihr dies erlauben wollt. Mit</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>Options -Indexes</td>
                    </tr>
                </tbody>
            </table>
            <p>sendet der Webserver kein Verzeichnislisting sondern gibt dann den HTTP-Error 403 aus, mit</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>Options +Indexes</td>
                    </tr>
                </tbody>
            </table>
            <p>sind Verzeichnislistings erlaubt.</p>
        </blockquote>
        <h2>FancyIndexing</h2>
        <p>Mit <em>FancyIndexing</em> ist es möglich, dem Verzeichnislisting, dass der Webserver erzeugt wenn keine Standardseite vorhanden ist (<a href="tutorialshtml/einfuehrung-htaccess.php#aendernderstandardseite">zur Konfiguration der Standardseite</a>) ein anderes Aussehen zu Verpassen. Zuerst müsst Ihr jedoch <em>FancyIndexing</em> anschalten. Dies geschieht mit folgender Zeile in der <em>htaccess</em>-Datei:</p>

        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>FancyIndexing On</td>
                </tr>
            </tbody>
        </table>
        <p>Nun habt Ihr viele Optionen um das Verzeichnislisting zu steuern:</p>
        <blockquote>
            <p><strong>AddDescription</strong></p>
            <p>Mit folgender Zeile könnt Ihr erreichen, dass im Verzeichnislisting neben dem Dateinamen eine Beschreibung auftaucht:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddDescription "Dies ist ein Bild" bild.jpg</td>
                    </tr>
                </tbody>
            </table>
            <p>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.</p>
            <p>Natürlich könnt Ihr auch einen absoluten Pfad angeben, falls Ihr nur einer bestimmten Datei die Beschreibung zuordnern wollt:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddDescription "Dies ist ein neues Bild" /home/thomasb/public_html/bild.jpg</td>
                    </tr>
                </tbody>
            </table>
            <p>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. <strong>Hinweis:</strong> Der absolute Pfad muss vom Wurzelverzeichnis des Servers ausgehen.</p>
            <p>Selbstverständlich können im Dateinamen auch Wildcards eingesetzt werden ("*" und "?").</p>
            <p><strong><a name="htaccess_AddEncoding"></a>AddEncoding</strong></p>
            <p>Diese Einstellmöglichkeit mappt eine Dateiendung zu einem spezifizierten <em>MIME-Encoding</em>-Typ:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddEncoding x-gzip gz AddEncoding x-compress Z</td>
                    </tr>
                </tbody>
            </table>
            <p>Die hier aufgeführten sollten die gebräuchlichsten sein. Natürlich könnt Ihr auch andere <em>MIME-Encoding</em>-Typen spezifieren, der Syntax von <em>Encoding</em> lautet:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddEncoding <em>"Typ"</em> <em>"Dateiendung ohne Punkt"</em></td>
                    </tr>
                </tbody>
            </table>
            <p><strong><a name="htaccess_AddType"></a>AddType</strong></p>
            <p>Mit dieser Einstellmöglichkeit könnt Ihr MIME-Typen auf Dateiendungen mappen. Der Syntax sieht folgendermassen aus:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddType <em>"MIME-Type"</em> <em>"Dateiendung ohne Punkt"</em></td>
                    </tr>
                </tbody>
            </table>
            <p>Für den String <em>MIME-Type</em> könnt Ihr einen beliebigen MIME-Type angeben, z.B. <em>text/plain</em>. <em>Dateiendung
ohne Punkt</em> müsst Ihr durch die Dateiendung ersetzen. Bsp: Wenn Ihr eine Datei <em>trash.txt</em> habt, dann ist die Dateiendung
                <em>txt</em>. Beachtet bitte, dass Ihr die Dateiendung <strong>ohne</strong> Punkt angeben müsst. Ein gültiger Eintrag könnte so aussehen:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddType text/plain txt</td>
                    </tr>
                </tbody>
            </table>
            <p><strong>AddIcon</strong></p>
            <p>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:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddIcon /icons/box1.gif html</td>
                    </tr>
                </tbody>
            </table>
            <p>So wird bei jeder Datei, die die Endung <em>html</em> hat, das Bild <em>/icons/box1.gif</em> 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.</p>
            <p>Ihr könnt natürlich nicht nur Icons an speziellen Dateiendungen vergeben, Ihr könnt dabei auch eine Datei benennen:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddIcon /icons/box1.gif heiri.html</td>
                    </tr>
                </tbody>
            </table>
            <p>So enthält jede Datei, die den Namen <em>heiri.html</em> hat als Icon die Datei <em>/icons/box1.gif</em>. Falls genau <strong>eine</strong> 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:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddIcon /icons/box1.gif /home/thomasb/public_html/heiri.html</td>
                    </tr>
                </tbody>
            </table>
            <p>So wird das Icon <em>/icons/box1.gif</em> der Datei <em>/home/thomasb/public_html/heiri.html</em> 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:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddIcon /icons/box1.gif ^^DIRECTORY^^</td>
                    </tr>
                </tbody>
            </table>
            <p>Der String <em>^^DIRECTORY^^</em> steht für Verzeichnis. So wird jedem Verzeichnis das Icon <em>/icons/box1.gif</em> verliehen. Ihr könnt auch das Icons, dass links-oben im Verzeichnislisting angezeigt wird ändern:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddIcon /icons/box1.gif ^^BLANKICON^^</td>
                    </tr>
                </tbody>
            </table>
            <p><em>^^BLANKICON^^</em> steht Stellvertretend für obengenanntes Icon.</p>
            <p>Doch dies ist noch lange nicht alles, Ihr könnt auch Wildcards benutzen:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddIcon /icons/box1.gif g*.html</td>
                    </tr>
                </tbody>
            </table>
            <p>Damit weist Ihr jeder Datei, die mit <em>g</em> beginnt und als Endung <em>.html</em> hat das Icons <em>/icons/box1.gif</em> zu. Es gibt noch weitere Möglichkeiten:</p>
            <p>Allen Dateien, die den Buchstaben <em>g</em> enthalten, das Icon <em>/icons/box1.gif</em> zuweisen:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddIcon /icons/box1.gif *g*</td>
                    </tr>
                </tbody>
            </table>
            <p>Allen Dateien, die mit <strong>einem</strong> beliebigen Buchstaben beginnen und mit <em>-buchstabe</em> aufhören das Icon <em>/icons/box1.gif</em> zuweisen:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddIcon /icons/box1.gif ?-buchstabe</td>
                    </tr>
                </tbody>
            </table>
            <p><strong>AddIconByEncoding</strong></p>
            <p>Hiermit könnt Ihr Icons nach dem <em>MIME-Encoding</em>-Type zuweisen (<a href="tutorialshtml/einfuehrung-htaccess.php#htaccess_AddEncoding">zur Konfiguration von Encoding</a>):</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddIconByEncoding /icons/box1.gif x-compress</td>
                    </tr>
                </tbody>
            </table>
            <p>Hiermit wird allen Dateien, die den <em>MIME-Encoding</em>-Type <em>x-compress</em> haben, das Icon <em>/icons/box1.gif</em> zugewiesen. <strong>Wichtig:</strong> Der <em>MIME-Encoding</em>-Type muss zuerst spezifiert worden sein (dies geschieht mit dem Befehl <em>Encoding</em>, siehe oben).</p>
            <p><strong>AddIconByType</strong></p>
            <p>Hiermit könnt Ihr Icons nachem dem <em>MIME-Typ</em> zuweisen (<a href="tutorialshtml/einfuehrung-htaccess.php#htaccess_AddType">zur Konfiguration von AddType</a>). Beachtet aber, dass der <em>MIME-Typ</em> definiert sein muss. Bsp:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddIconByType /icons/box1.gif text/html</td>
                    </tr>
                </tbody>
            </table>
            <p>So wird allen Dateien, die den MIME-Type <em>text/html</em> haben, das Icon <em>/icons/box1.gif</em> zugewiesen. Bei der Angabe des MIME-Types könnt Ihr auch Wildcards verwenden:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddIconByType /icons/box1.gif text/*</td>
                    </tr>
                </tbody>
            </table>
            <p>So weist Ihr allen Dateien, die dem MIME-Typ <em>text/*</em> entsprechen das Icon <em>/icons/box1.gif</em> zu. Das "*" entspricht einem beliebigen Text.</p>
            <p><strong>DefaultIcon</strong></p>
            <p>Mit der Variable <em>DefaultIcon</em> könnt Ihr den Dateien, für die kein Icon zugewiesen worden ist, ein Standardicon festlegen:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>DefaultIcon /icons/box1.gif</td>
                    </tr>
                </tbody>
            </table>
            <p>So wird allen Dateien, für die nicht explizit ein Icon zugewiesen worden ist, das Icon <em>/icons/box1.gif</em> zugewiesen. Der Pfad zum Icon muss absolut, vom DocumentRoot des Webservers aus gesehen, sein.</p>
            <p><strong>HeaderName</strong></p>
            <p>Bei dem Verzeichnislisting wird normalerweise im oberen Teil der aktuelle Pfad angeben. Mit der Variable <em>HeaderName</em> könnt Ihr dort auch etwas anderes anzeigen. Die nach <em>HeaderName</em> spezifizierte Datei wird am Anfang des Verzeichnislistings angezeigt.</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>HeaderName HEADER</td>
                    </tr>
                </tbody>
            </table>
            <p>Falls jetzt ein Verzeichnislisting angezeigt wird, und in dem betreffenden Verzeichnis befindet sich die Datei <em>HEADER</em>, so wird diese am Anfang des Listings angezeigt. Falls sich in dem betreffenden Verzeichnis keine in <em>HeaderName</em> aufgeführte Datei befindet, so wird das normale Verzeichnislisting angezeigt. Ihr könnt nur <strong>eine</strong> Datei in <em>HeaderName</em> spezifizieren.</p>
            <p><strong>ReadmeName</strong></p>
            <p>Dies ist das Gegenteil zu obengenanntem <em>HeaderName</em>. Der Inhalt dieser Datei wird beim Verzeichnislisting anstelle der Serversignatur angezeigt. Und so könnt Ihr das verwenden:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>ReadmeName README</td>
                    </tr>
                </tbody>
            </table>
            <p>Sie wird das Dokument <em>README</em> im unteren Teil des Verzeichnislistings angezeigt. Was noch zu beachten ist: Falls es die Datei "README.HTML" gibt, wird diese anstelle der Datei <em>README</em> verwendet.</p>
            <p><strong>IndexIgnore</strong></p>
            <p>Hier könnt Ihr Dateien auflisten, die nicht im Verzeichnislisting erscheinen sollen. Ihr könnt ganze Dateinamen, Endungen von Dateien und Wildcards verwenden.</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>IndexIgnore README .htaccess *~</td>
                    </tr>
                </tbody>
            </table>
            <p>In diesem Beispiel werden folgende Dateien nicht aufgelistet: Alle Dateien, die <em>README</em> heissen, alle Dateien, die <em>.htaccess</em> heissen und alle Dateien, die am Schluss eine Tilde (~) enthalten.</p>
            <p>Standardmässig werden alle Dateien ignoriert, die mit einem Punkt beginnen.</p>
            <p>Anderes Beispiel:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>IndexIgnore /..</td>
                    </tr>
                </tbody>
            </table>
            <p>Mit dieser Anweisung wird kein Link zum übergeordneten Verzeichnis generiert.</p>
            <p><strong>IndexOptions</strong></p>
            <p>Hiermit kann man das Aussehen des Verzeichnislistings sehr stark beeinflussen. Dies hier ist ein Beispiel:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>IndexOptions IconHeight=60 IconWidth=35 IconsAreLinks ScanHTMLTitle</td>
                    </tr>
                </tbody>
            </table>
            <p>Dieser Befehl kennt mehrere Optionen, die ich hier nun kurz vorstellen werde:</p>
            <blockquote>
                <p><strong>IconHeight=[Wert in Pixel]</strong></p>
                <p>Hiermit könnt Ihr Höhe, die die Icons neben den Dateinamen haben ändern. Direkt hinter dem <em>IconHeight=</em> 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.</p>
                <p><strong>IconWidth=[Wert in Pixel]</strong></p>
                <p>Hier könnt Ihr die Breite der Icons, die neben dem Dateinamen im Verzeichnislisting erscheinen, ändern. Setzt einfach den Wert in Pixel direkt neben <em>IconWidth=</em> (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.</p>
                <p><strong>IconsAreLinks</strong></p>
                <p>Damit befiehlt Ihr dem Webserver, dass er die Icons als Link auf die betreffende Datei darstellen soll.</p>
                <p><strong>NameWidth=[n*]</strong></p>
                <p>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.:</p>
                <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                    <tbody>
                        <tr>
                            <td>NameWidth=5</td>
                        </tr>
                    </tbody>
                </table>
                <p>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.</p>
                <p><strong>ScanHTMLTitles</strong></p>
                <p>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.</p>
                <p><strong>SuppressColumnSorting</strong></p>
                <p>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.</p>
                <p><strong>SuppressDescription</strong></p>
                <p>Damit könnt Ihr die Beschreibung im Verzeichnislisting ausblenden.</p>
                <p><strong>SuppressLastModified</strong></p>
                <p>Damit könnt Ihr verhindern, dass im Verzeichnislisting angezeigt wird, wann die Datei zuletzt geändert wurde.</p>
                <p><strong>SuppressSize</strong></p>
                <p>Damit wird die Dateigrösse im Verzeichnislisting ausgeblendet.</p>
            </blockquote>
            <p><strong>IndexOrderDefault</strong></p>
            <p>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:</p>
            <ul>
                <li>"Name" (Dateiname),</li>
                <li>"Size" (Dateigrösse),</li>
                <li>"Date" (Datum der letzten Änderung) und</li>
                <li>"Description" (Beschreibung).</li>
            </ul>
            <p>Bsp: Wenn Ihr das Listing nach Dateinamen aufsteigend sortieren wollt:</p>
            <blockquote><code>IndexOrderDefault Ascending Name</code></blockquote>
            <p><strong>AddAlt</strong></p>
            <p>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:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddAlt "Ich bin eine Datei" datei.gif</td>
                    </tr>
                </tbody>
            </table>
            <p>In diesem Beispiel wird dem Icon der Datei <em>datei.gif</em> als Beschriftung <em>Ich bin ein Datei</em> gegeben. Die Beschriftung muss zwischen Anführungs- und Schlusszeichen stehen. Anstelle eines Dateinamens könnt Ihr auch Wildcards angeben:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddAlt "Beschriftung" abc*.html</td>
                    </tr>
                </tbody>
            </table>
            <p>In diesem Beispiel wird allen HTML-Dateien, die mit <em>abc</em> beginnen die Beschriftung <em>Beschriftung</em> zugewiesen. Ihr könnt auch Dateiendungen angeben:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddAlt "Bild" jpg</td>
                    </tr>
                </tbody>
            </table>
            <p>So erhalten alle Icons der Dateien, die die Endung <em>jpg</em> aufweisen die Beschrifung <em>Bild</em>. Beachtet aber, dass dann auch das Icon einer Datei namens <em>jpg</em> die Beschriftung <em>Bild</em> bekommt.</p>
            <p><strong>AddAltByEncoding</strong></p>
            <p>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 <em>x-gzip</em> angehören die Beschriftung <em>Test</em> zugeben, müsst Ihr folgende Zeile verwenden:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddAltByEncoding "Test" x-gzip</td>
                    </tr>
                </tbody>
            </table>
            <p>Auch hier muss die Beschriftung zwischen Anführungs- und Schlusszeichen stehen.</p>
            <p><strong>AddAltByTyp</strong></p>
            <p>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 <em>text/plain</em> angehören, die Beschriftung <em>Dies ist Plaintext</em> zu geben, müsst Ihr folgende Zeile in eure <em>htaccess</em>-Datei hinzufügen:</p>
            <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
                <tbody>
                    <tr>
                        <td>AddAltByType "Dies ist Plaintext" text/plain</td>
                    </tr>
                </tbody>
            </table>
            <p>Auch hier muss die Beschriftung zwischen Anführungs- und Schlusszeichen stehen.</p>
        </blockquote>
        <h2>Passwortschützen von Verzeichnissen</h2>
        <p>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 <em>html_auth</em> in eurem Heimatverzeichnis speichert. Die Datei wird mit dem Programm <em>htpasswd</em> erzeugt:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>user@access1:~&gt; htpasswd -c /home/user/html_auth/htpasswd user</td>
                </tr>
            </tbody>
        </table>
        <p>So wird eine Passwortdatei erzeugt und der Benutzername <em>user</em> hinzugefügt. Du musst nun zweimal das Passwort für den Benutzername <em>user</em> eingeben. Du kannst selbstverständlich auch einen anderen Dateinamen oder Benutzernamen wählen, dies hier soll nur ein Beispiel sein.</p>
        <p>Du kannst auch andere Benutzernamen hinzufügen:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>user@access1:~&gt; htpasswd /home/user/html_auth/htpasswd user2</td>
                </tr>
            </tbody>
        </table>
        <p>Hier wird die Option <em>-c</em> weggelassen, <strong>dies ist auch wichtig, da Du sonst die alte Datei vollständig überschreiben würdest!</strong>. Du kannst neben einer Passwortdatei auch eine Gruppendatei erstellen. Diese hat folgendes Format:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>my-users: hans jakob heiri lisbeth</td>
                </tr>
            </tbody>
        </table>
        <p>So wird definiert, dass die Benutzer <em>hans, jakob, heiri</em> und <em>lisbeth</em> der Gruppe <em>my-users</em> 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 <em>html_auth</em>-Verzeichnis speichern, z.B. mit dem Dateinamen <em>htgroups</em></p>
        <p>Wenn Du die Passwortdatei erstellt hast, so kannst Du nun die <em>.htaccess</em>-Datei erstellen. Sie sollte in dem Verzeichnis sein, dass Du schützen willst und folgende Zeilen enthalten:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>
                        <p>AuthType Basic</p>
                        <p>AuthName "A secret Place"</p>
                        <p>AuthUserFile /home/user/html_auth/htpasswd</p>
                        <p>AuthGroupFile /home/user/html_auth/htgroups</p>
                        <p>require valid-user</p>
                    </td>
                </tr>
            </tbody>
        </table>
        <p>Der Text hinter <em>AuthName</em> gibt dem Bereich einen Namen, den sich der Browser merken kann (er muss dann nicht bei jedem Reload nach dem Passwort fragen). <em>AuthUserFile</em> erwartet den vollen Pfad zu Deiner Passwortdatei, und <em>AuthGroupFile</em> erwartet den vollen Pfad zu einer Gruppendatei. Falls Du keine hast, so gib <em>/dev/null</em> an. <em>require</em> regelt schliesslich, welche Bedingung eintreffen muss, damit der Bereich geöffnet wird:</p>
        <ul type="circle">
            <li>valid-user (der Benutzer muss in der Passwortdatei vorkommen)</li>
            <li>user hans (nur der Benutzer <em>hans</em> wird zugelassen</li>
            <li>user hans heiri (nur die Benutzer <em>hans</em> und <em>heiri</em> werden zugelassen</li>
            <li>group my-users (alle Mitglieder der Gruppe <em>my-users</em> werden zugelassen</li>
        </ul>
        <p>Du kannst ohne Probleme mehrere <em>require</em>-Bedingungen einbauen.</p>
        <h2>Die &lt;Limit&gt;-Option</h2>
        <p>Mit der <em>&lt;Limit&gt;</em>-Option könnt Ihr steuern, wer die HTTP-Befehle <em>GET, PUT, POST</em> ausführen kann und wer nicht. Beispiel:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>
                        <pre>&lt;Limit GET&gt;
    Order allow,deny
	Allow from all
	Deny from none
&lt;/Limit&gt;
&lt;Limit POST,PUT&gt;
	Order deny,allow
	Deny from all
	Allow from .ch
&lt;/Limit&gt;
</pre>
                    </td>
                </tr>
            </tbody>
        </table>
        <p>In diesem Beispiel können alle die Seiten anschauen (<em>GET</em>), aber nur Hosts, deren Hostname mit <em>.ch</em> aufhört können die Befehle <em>PUT</em> und <em>POST</em> machen. Ihr könnt die Befehle <em>Order, Allow </em>und <em>Deny</em> auch für alle Befehle gültig machen, indem Ihr sie nicht innerhalb eines <em>&lt;Limit&gt;</em>-Bereiches gebraucht:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>
                        <p>Order deny,allow</p>
                        <p>Deny from .konkurrenz.com</p>
                        <p>Deny from center.bluewin.ch</p>
                        <p>Deny from 192.168</p>
                        <p>Allow from all</p>
                    </td>
                </tr>
            </tbody>
        </table>
        <p>Hier wird der Zugriff für alle Host aus der Domain <em>konkurrenz.com</em> gesperrt. Auch der Host <em>center.bluewin.ch</em> darf nicht zugreifen. Alle Zugriffe eines Rechner, dessen IP mit <em>192.168</em> beginnt, werden auch gesperrt. Alle anderen Rechner dürfen auf die Seiten zugreifen.</p>
        <p>Der Befehl <em>Order</em> legt fest, in welcher Reihenfolge die Befehle <em>Allow</em> und <em>Deny</em> ausgewertet werden.</p>
        <p>Ein anderes Beispiel:</p>
        <table border="1" cellspacing="0" cellpadding="8" bgcolor="#DFDFDF">
            <tbody>
                <tr>
                    <td>
                        <pre>AuthType Basic
AuthName A secret Place
AuthUserFile /home/user/html_auth/htpasswd
AuthGroupFile /home/user/html_auth/htgroups
&lt;Limit GET&gt;
	Order Allow,Deny
	Allow from all
	Deny from none
&lt;/Limit&gt;
&lt;Limit PUT POST&gt;
	Order Allow,Deny
	Allow from .ch
	Deny from all
	require valid-user
&lt;/Limit&gt;
</pre>
                    </td>
                </tr>
            </tbody>
        </table>
        <p>Alle dürfen die Seiten anschauen (<em>GET</em>). Die Befehle <em>PUT</em> und <em>POST</em> dürfen nur Rechner ausführen, deren Hostname mit <em>.ch</em> aufhört und die zusätzlich noch den Benutzernamen und das dazugehörige Passwort aus der Passwortdatei kennen.</p>