|
|
|
|
Mit dieser Datei lassen sich vom Nutzer eines Webservers, ohne Zugang zur httpd.conf, dessen Arbeitsmöglichkeiten umfangreich steuern. Die Festlegungen in dieser Datei überschreiben die Serverdirectiven und sind bis zur erneuten Änderung in der jeweiligen Verzeichnisstruktur gültig.
Voraussetzung ist allerdings, dass die entsprechenden Möglichkeiten in der AllowOverride Directive (siehe) freigegeben sind.
Web-Admin sollte vor der Freigabe genau prüfen ob die Rechte für seine Nutzer
notwendig sind.
Für den Hochschul- und FB-Server sind die Rechte AuthConfig und Limit
gesetzt. Dies ermöglicht den Nutzer, den Zugang zu ihren Webseiten durch
Passwort- und Domänkontrolle zu schützen. Die konkreten Einstellungen sind
unter den Hinweisen zu den Servern an der HTW beschrieben.
Mit der Directive ALL bietet die .htaccess aber noch mehr Möglichkeiten. Diese sollen hier angesprochen werden.
Hinweis: Die hier gemachten Aussagen betreffen natürlich nur den Schutz bei
Zugang über den Server.
Als Beispiel wollen wir "Punkt(Dot)dateien" schützen. Wie wir wissen, sollten und
werden Dateinamen, die mit einen Punkt beginnen, für besondere Aufgaben genutzt.
Sie bezeichnen Dateien/Verzeichnisse die Einstellungsparameter für
(Dienst)Programme enthalten. Es ist also sicher sinnvoll, diese vor den Zugriff
aus dem Internet zu schützen.
Seine eigenen .-Dateien etwa .htaccess und .htpasswd schützt der Server durch
folgende Standardeinstellung:
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
Um alle .-Dateien in einer Verzeichnisstruktur (etwa public_html) zu schützen, schreibt man in die .htaccess einfach:
<Files ~ "^\.">
Deny from all
</Files>
oder analog
<FilesMatch "^\."> deny from all </FilesMatch>
Hinweis: Wenn Sie Ihre Einstellungen testen, denken Sie immer an den Cache-Speicher.
Bei fehlerhaften Aufruf liefert der Server einen entsprechenden Fehlercode und eine Standardmeldung. Diese kann auf den Server durch den Verweis auf ein ErrorDocument geändert werden. Etwa für Seite nicht gefunden
ErrorDocument 404 /missing.html
und den entsprechenden Text in /missing.html
Dies kann der Nutzer über eine .htaccess auch individuell realisieren.
Als Beispiel könnte man für ein geschütztes Verzeichnis /priv, mit einer
index.html keine Verzeichnisanzeige, in eine Datei etwa fehler404.html, einen
freundlichen Text schreiben.
Für dieses Verzeichnis sind nur berechtigte Anzeigen erlaubt!
Bitte beachten Sie diesen Wunsch und versuchen Sie keinen unerlaubten Zugang.
Die .htacces in /priv könnte dann so aussehen
ErrorDocument 404 /priv/fehler404.html
mit Redirect
Falls bekannte Webseiten verschoben werden, kann man die URL weiterleiten. Dies geht
auch auf einen anderen Server. Als Beispiel Weiterleitung der Startseite des Servers
wwwbs auf neuen Server wwwbs1 durch .htaccess in DocumentRoot.
Inzwischen wurde der AIX-Server stillgelegt und für den Linuxserver wieder der Name
wwwbs eingeführt. wwwbs1 ist nur noch ein alias.
Redirect /index.html http://wwwbs1.informatik.htw-dresden.de
Oder alle Seiten
Redirect permanent / http://wwwbs1.informatik.htw-dresden.de
Die .htaccess kann auch in den entsprechenden Verzeichnis angelegt werden.
Als Beispiel wird auf diesen Server die Struktur /lehre/folien/folien_sys/admin/code/ aus den
passwortgeschützen Bereich in den "freien" Bereich /fadmin/code verschoben.
Um die irgendwo vorhandenen Links zu erhalten, wird im alten Verzeichnis eine
.htaccess mit
Redirect /lehre/folien/folien_sys/admin/code/ https://wwwbs.informatik.htw-dresden.de/fadmin/code/
angelegt. Voraussetzung ist, wie oben bereits genannt die Directive AllowOverride ALL.
Die erste Angabe muss ein vollständiger Pfad ab der DocumentRoot und die zweite
Angabe, entgegen der Aussagen einiger Autoren, eine vollständige URL sein.
Will man einige Seiten in der alten Stuktur belassen, hier etwa Kopien die nur für die interne Lehre genutzt werden sollen, muss man die Dateien einzeln weiterleiten. Also etwa
Redirect /lehre/folien/folien_sys/admin/code/index.code.html https://wwwbs.informatik.htw-dresden.de/fadmin/code/index.code.html Redirect /lehre/folien/folien_sys/admin/code/utf-8.html https://wwwbs.informatik.htw-dresden.de/fadmin/code/utf-8.html
mit ErrorDocument
Zum Verschieben von Seiten kann man auch das ErrorDocument nutzen.
In obigen Fall für die Seite /lehre/folien/folien_sys/admin/code/index.code.html in der .htaccess etwa
ErrorDocument 404 /fadmin/code/index.code.html
Bei dieser Lösung wird die verschobene Seite aber unter den alten Verzeichnis angezeigt. Eine relative Adressierung, wie sie auf diesem Server wegen der besseren Nutzung von Downloads genutzt wird, ist damit nicht möglich.
mit Meta-Tag Refresh
Der Vollständigkeit halber sei hier betont, dass es noch eine Reihe weiterer
Möglichkeiten zum Weiterleiten auf verschobene Seiten gibt. In unserem Fall
wäre z.B. eine einfache clientseitige Lösung über eine Meta-Tag Refresh
denkbar. Also in die Seite index.code.html im head die Zeile
<meta http-equiv="refresh" content="1; URL=http://localhost/fadmin/code/index.code.html">
ergänzen. Wird die "alte" Seite durch einen Client aufgerufen erfolgt eine kurze Anzeige, 1 Sekunde, und danach wird vom Client die "neue" Seite aufgerufen. Der Inhalt der "alten" Seite kann z.B. ein kurzer Hinweis zum Weiterleiten sein.
mit der RewriteEngine
Im Apache gibt es noch eine weitere Lösung zur Umleitung, über die RewriteEngine.
Dafür muss der Modul mod_rewrite aktiviert sein.
Etwa in /etc/sysconfig/apache2 unter
APACHE_MODULES="... rewrite" in die Liste eingetragen.
Will man z.B. für alle Seiten https erzwingen, ohne gleich den Port 80 zu sperren, kann man
dies durch folgende .htaccess in der DocumentRoot erreichen:
# HTTPS-Verschluesselung erzwingen
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
# fuer alle Dateien
RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI}
Dies sieht alles etwas mystisch aus und es ist auch so. Es gibt tausend Schreibweisen und keine
vernünftige, sprich einfach verständliche, Dokumentation. Die RewriteCond könnte z.B.
auch so aussehen:
RewriteCond %{HTTPS} !=on
Oder die RewriteRule nur für bestimmte Verzeichnisse (.htaccess dann in diesem Verzeichnis, hier
z.B. Prüfungsseiten, da dort die Eingabe des
LDAP-Passwortes gefordert wird.):
RewriteRule ^(.*) https:///%{SERVER_NAME}/lehre/pruefungen/$1 [R,L]
Leider bringt diese Lösung nicht den erhofften Erfolg.
Das LDAP-Passwort wird über http abgefragt und erst dann erfolgt das Umschalten auf https.
Auch das verschieben der Rewrite-Anfoderung in das Parentverzeichnis - hier /lehre, etwa
RewriteRule ^pruefungen/(.*) https:///%{SERVER_NAME}/lehre/$1 [R,L]
bingt keinen Erfolg. Jetzt wird das LDAP-Passwort zuerst über http und dann nochmals
über https angefordert.
Dies liegt offensichtlich daran, dass die URL vor der Umleitung gelesen wird und dies geht
nur über den geforderten Passwortschutz. Siehe Darstellung aus Manual
Redirect und Schutz der Passwortübertragung
Eine Lösung wäre ein Elternverzeichnis zur Umschaltung einzufügen. Im vorliegenden Fall
müssten dann aber alle Links (da immer relativ angegeben) in den Seiten unter pruefungen/ überarbeitet werden.
Das beschriebene Problem lässt sich aber einfacher lösen. Man benennt die Verzeichnisstruktur um,
etwa spruefungen/, dort liegt dann auch die .htaccess zur LDAP-Authentifizierung.
Im neuen Verzeichnis pruefungen/ erzeugt man dann etwa folgende .htaccess
Redirect /lehre/pruefungen https://wwwbs.informatik.htw-dresden.de/lehre/spruefungen
Das Passwort wird nun wie gewünscht über https angefordert.
Weitere Informationen zu den .htaccess files im Manual lokal oder sman.
| L. Koch; 27.10.2006 |
|