Wie
kann man einen Webserver steuern, insbesondere wenn man nicht die php.ini verändern
kann (z. B. 1&1 Webhosting, Strato etc.)? Mit der .htaccess! Hier ein paar
ausgewählte Möglichkeiten. Ich erarbeite gerade weitere nützliche
Informationen zum Gebrauch ausschließlich auf 1&1 Webhosting/Puretec-Webspace,
siehe hier - 1&1/Puretec. Ich habe zuerst eine allgemeine
Erläuterung der drei Steuerungsdateien angeführt und danach folgen Detailbeispiele.
Erläuterung: .htaccess
Die Datei .htaccess ist die Konfigurationsdatei
und legt die Art des Zugriffsschutzes sowie das Ziel der Passwortdatei fest.
AuthName
Kurze Beschreibung des geschützten Web-Bereichs. Diese Beschreibung
wird in dem vom Browser generierten Fenster dem Anwender angezeigt.
AuthType
Der üblicherweise verwendete Authorisierungstyp ist Basic.
In der vorliegenden Beschreibung wird nur auf Basic eingegangen, dieser
Typ benutzt als Passwortdatei eine weitere Textdatei, hier im Beispiel die .htpasswd
AuthUserFile
Hier wird der absolute Pfad vom Doc-Root eingegeben, nicht
der relative!
AuthGroupFile Dateibezeichnung der
Gruppendatei. Diese Angabe ist nur erforderlich, wenn Sie in der Konfigurationsdatei
.htaccess die Direktive require group Mitarbeiter Kunden etc.
verwendet haben.
<Limit> oder
<Files> Mit
einer der beiden Direktiven wird angegeben, was geschützt werden soll. Mit
<Limit> werden alle Dateien in dem betroffenen Verzeichnis gegen
den Zugriff über angegebene Methoden des Hypertext Transfer Protocols (http) abgesichert.
Meist werden hier die Methoden GET und evtl. auch noch POST angegeben.
Mit <Files> können einzelne Dateien oder Dateigruppen geschützt
werden. Bei der Angabe der Dateien können Wildcards benutzt werden, und zwar der
Stern "*" für eine beliebige Anzahl von Zeichen und das Fragezeichen
"?" für genau ein Zeichen. So kann z. B. mit <Files *.htm*> der
Zugriff auf alle HTML-Dokumente geschützt werden, während der Zugang auf andere
Dateitypen im gleichen Verzeichnis frei ist.
require
Mit der require-Direktive wird angegeben, nach welchem Kriterium
Benutzer zugelassen werden sollen. Es gibt hier drei alternative Möglichkeiten:
- require user martin stefan etc.
Gibt den Bereich gezielt
nur den aufgelisteten Benutzern frei. Diese Alternative erfordert einen hohen
Pflegeaufwand, da alle neuen Nutzer explizit eingetragen werden müssen. - require
valid-user
Gibt den Bereich für alle in der Passwortdatei definierten
Benutzer frei. Dies ist die am häufigsten verwendete Form, sie ist im Allgemeinen
die Alternative, die sich am einfachsten pflegen läßt. - require group
Kunden Mitarbeiter etc.
Es dürfen Benutzer zugreifen, die einer der
aufgeführten Gruppen Kunden, Mitarbeiter usw. angehören. Diese Variante
bietet sich an, wenn man verschiedene Bereiche mit unterschiedlichen Zugriffsrechten
versehen will, aber nur eine Passwortdatei pflegen möchte.
Erläuterung:
.htpasswd
Die Datei
.htpasswd ist
die eigentliche Passwortdatei.
martin
= 21JjhJqX/R84o
stefan = 21GVZUC7Vjx9w
Mehr
dazu folgt weiter unten.
Erläuterung:
.htgroup
In der Datei
.htgroup können
Benutzergruppen definiert werden. Die hier genannten Gruppen finden sich in der
.htpasswd wieder.
mitarbeiter:
Martin Stefan Tanja
kunden: Marcus Martin Ilse
Eine
Gruppe wird definiert durch den Namen der Gruppe, gefolgt von einem Doppelpunkt
und dann einer Anzahl von Benutzernamen derjenigen Anwender, die der Gruppe zugeordnet
werden sollen. Es besteht keine Begrenzung der Anzahl der Gruppen oder welchen
Namen die Gruppen haben sollen.
Ein Verzeichnis schützen
Möchtest du ein Verzeichnis
(www.domain.de/verzeichnis/) schützen, damit niemand darauf zugreifen kann
oder den Zugriff nur für eine definierte Benutzergruppe freigeben? Dazu lege
bitte ein Verzeichnis an, z. B. pfad, wo alle zu
schützenden Dateien abgelegt werden. Dabei ist es völlig egal, um welche Dateien
es sich handelt. Beim Aufruf einer Datei aus diesem Verzeichnis wird vom Browser
ein Fenster generiert, in dem der User Benutzernamen und Kennwort eingeben muss,
bevor diese Datei angezeigt wird. In diesem Verzeichnis erzeugst du eine neue
Datei mit der Bezeichnung .htaccess. Schreibe folgende
Zeilen hinein:
AuthUserFile /pfad/.htpasswd
AuthGroupFile /dev/null
AuthName "name"
AuthType Basic
<Limit GET>
require valid-user
</Limit>
In der ersten Zeile gibst du den absoluten Pfad zur
Passwortdatei .htpasswd ein (nicht den relativen
Pfad!). Dieser ist je nach Provider unterschiedlich, z. B. /homepages/20/d1234567/htdocs/.htpasswd.
Den absoluten Pfad teilt dir dein Provider mit oder wirf ein Blick in dein Konfigurationsmenü,
oftmals gibt es dort die gewünschte Information! Die .htpasswd
muss nicht zwingend in dem zu schützenden Ordner liegen, du kannst diese
auch für diverse Ordner zentral ablegen und verweist nur mit dem absoluten
Pfad dorthin.
Lege nun eine zweite Datei
in das Verzeichnis mit dem Namen .htpasswd. In diese
Datei schreibst du nun alle Benutzernamen und dahinter das zugehörige verschlüsselte
Passwort. Um das Passwort zu generieren steht dir der Crypt-Generator zur Verfügung. Das Passwort könnte
dann beispielsweise so aussehen:
martin = 21JjhJqX/R84o
stefan
= 21GVZUC7Vjx9w
Schreibweise in der .htpasswd: martin:21JjhJqX/R84o
Wichtig ist, dass keine Leerzeichen in der .htpasswd enthalten sind!
Links
auf deine Bilder verhindern
Füge der .htaccess-Datei folgendes hinzu:
#
Rewrite Rule for images
RewriteCond %{HTTP_REFERER} <ihrURL> RewriteRule
^(.*)$ http://<ihrURL>
Permanente
Änderung des aufgerufenen Hosts mit mod_rewrite
Füge der .htaccess-Datei
folgendes hinzu, und du erhältst damit eine permanente Weiterleitung von
der Domain beispiel.de zu beispiel.org
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.beispiel\.de$ [NC]
RewriteRule ^(.*) http://www.beispiel.org/$1
[R=permanent]
1&1
Webhosting, Verbesserung bei negativem Point mit mod_speling
Viele Provider,
darunter auch 1&1 Webhosting, haben das Apache Modul mod_speling standardmäßig
aktiviert. Will heißen, ruft jemand eine Datei namens pfad123.php auf (oder
Grafik etc.), es existiert allerdings nur eine Datei mit dem Namen pfad124.php,
wird diese Datei aufgerufen. Im Grunde ja sinnvoll, wer das nicht möchte,
fügt bitte folgende Zeite in die .htaccess hinzu.
CheckSpelling
Off
Einen oder mehrere Benutzer
sperren
Mit folgendem Eintrag kannst du entweder bestimmte Benutzer (IP-Adressen)
festlegen, die Zugriff auf den Server haben, oder Benutzer die keinen Zugriff
haben.
Nur bestimmte IP-Adressen haben Zugriff:
order deny, allow
allow from 228.105.55.101
deny from all
Bestimmte IP-Adressen
haben keinen Zugriff:
order deny, allow
deny from 228.105.55.101
Bestimmte
Dateien sperren
Willst du nicht, dass alle Dateien mit einem Punkt, z.
B. die .htaccess- oder die .htpasswd-Datei,
vom Server ausgeliefert werden, nutze folgenden Code:
<FilesMatch
"^\." >
deny from all
</FilesMatch>
Bestimmte Dateitypen zum Download freigeben
Bietest
du Downloads an, dann ist es vielleicht sinnvoll bestimmte Dateien direkt zum
Downloaden anzugeben:
<FilesMatch "\.(gz|pdf|zip|exe)$" >
ForceType application/octet-stream
</FilesMatch>
Fehlerseiten abfangen
Diese Möglichkeit ist eine
sehr gute Idee, die wenig hilfreichen Fehlermeldungen vom Browser zu umgehen,
wie z. B. wenn die angeforderte Seite nicht gefunden wurde. Schreibe in eine .htaccess-Datei
z. B. folgenden Code:
ErrorDocument 403 http://www.website.de/error403.php
ErrorDocument 404 http://www.website.de/error404.php
ErrorDocument 500 http://www.website.de/error500.php
Den Fehler 500 kannst du speziell bei 1&1 Webhosting (vormals Puretec)
nicht mit der .htaccess abfangen. Hier legst du die Fehlerdatei mit dem Namen
error500.html in das Wurzelverzeichnis (Root) deines Webservers.
Automatische
Weiterleitung
Selbstverständlich kannst du auch eine Weiterleitung setzen.
Dabei muss die .htaccess-Datei im obersten Ordner
(root) liegen.
Redirect / http://www.anderewebsite.de/
Zweite Möglichkeit der Weiterleitung besteht darin, dass der User bei Eingabe
eines bestimmten Verzeichnisses weitergeleitet wird. Beispiel:
Redirect
/pfad http://www.ganzanderewebsite.de/
Gibt nun jemand den URL www.anderewebsite.de/pfad
ein, wird er auf die Domain www.ganzanderewebsite.de/ weitergeleitet.
Server
für SSI-Anweisungen konfigurieren
Um Apache-Servern mitzuteilen, dass
sie SSI (Server Sides Includes) bearbeiten sollen, gibt man in der .htaccess-Datei
folgendes an:
AddHandler server-parsed .shtml
Options+ Includes
Alternativ können auch andere
Dateiendungen, wie z.B. .html oder eine freie Erfindung
wie .marcus an den Handler übergeben werden. Man
sollte aber generell auf .html als Handler verzichten, da die Performance des
Servers dadurch mehr beansprucht würde, außer man benutzt PHP-Scripte in
den HTML-Dateien.
Bei anderen Endungen, würde es so beispielsweise aussehen:
AddHandler server-parsed .marcus
Bestimmte
Dateien als PHP4 ausführen lassen
Du kannst beliebige Dateitypen als PHP4-Skripte
parsen lassen. Häufig besteht der Wunsch z. B. .xxx-Dateien
als PHP4-Skripte auszuführen.
AddType x-mapp-php4 .xxx
Dabei steht .xxx für irgendeine freie Endung (php,
php3, php4, phtml etc.).
Bestimmte
Datei als Startdatei aufrufen
Meistens heißt die Startdatei der
meisten Provider index.html, default.html, welcome.html oder home.html. Du kannst
auch einen beliebigen anderen Namen als Startdatei verwenden, wie z.B. index.php,
index.shtml, index.php4 oder sogar startdatei.marcus. Dazu lege folgendes an:
DirectoryIndex index.shtml
In diesem Beispiel würde die
Startdatei index.shtml aufgerufen werden, soweit sie vorhanden ist.
Dynamische
Seiten suchmaschinenfreundlich machen
Mit Adressen wie http://www.reif.org/news/news.php?number=5
kommen nicht alle Suchmaschinen klar. Suchmaschinen hätten gerne ganze Adressen,
wie z.B. http://www.reif.org/news/frankfurt.html.
Mit folgendem Eintrag in der .htaccess schaffst du
Abhilfe.
RewriteEngine on
RewriteCond %{REQUEST_URI} news(.*)\.html$
RewriteRule news(.*)\.html$ /news.php?id=$1
Wie
sieht nun eine komplette .htaccess aus?
ErrorDocument
503 /503.php
ErrorDocument 501 /501.php
ErrorDocument 500 /500.php
ErrorDocument 404 /404.php
ErrorDocument 403 /403.php
ErrorDocument 401
/401.php
AddType x-mapp-php4 .php
AddHandler
server-parsed .xml
Order deny,allow
Deny from 62.109.108.248
Redirect
/testpfad/nochenpfad http://test.reif.org
RewriteEngine
on
RewriteCond %{HTTP_HOST} ^www.reif-online\.de$ [NC]
RewriteRule ^(.*)
http://www.reif.org/$1 [R=permanent]
Weitere Infos
findest du auch in den FAQs und Support-Unterlagen deines Providers. Inhalte auszugsweise
von http://www.trash.net/faq/htaccess.shtml entnommen sowie in eigener Recherche.