htaccess - Ordner mit bestimmten Präfix schützen
Alex
- webserver
0 ChrisB0 Jörg Reinholz0 Alex0 Jörg Reinholz0 Kay
Hallo,
ich würde gerne auf meinem Server alle Ordner mit einem bestimmten Präfix "pvt_" schützen.
Um nicht jeden Ordner einzeln zu erfassen, dachte ich, dass es ja vlt. auch möglich ist, diese Ordner in einer Codezeile anzusprechen.
Wie stelle ich das an, wenn es möglich ist?
Gruß
Alex
Hi,
ich würde gerne auf meinem Server alle Ordner mit einem bestimmten Präfix "pvt_" schützen.
Um nicht jeden Ordner einzeln zu erfassen, dachte ich, dass es ja vlt. auch möglich ist, diese Ordner in einer Codezeile anzusprechen.
Wie stelle ich das an, wenn es möglich ist?
Wenn du vollen Zugriff auf die Server-Konfiguration hast, sollte sich das erreichen lassen, indem du die Require- in einer LocationMatch-Direktive unterbringst. (Letztere lässt sich nicht in .htaccess nutzen. FilesMatch wäre zwar dort einsetzbar, aber ich glaube das schaut wirklich nur auf das letzte Path-Segement aka „Dateiname“, und wird sich zum matchen von Verzeichnissen nicht nutzen lassen.)
MfG ChrisB
Wie stelle ich das an, wenn es möglich ist?
Das hier gänge (mit mod_alias, meist aktiviert) in der .htaccess:
[link:http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirectmatch@title=RedirectMatch] ^(.*/pvt_.*/.*$) /404.php?orig=$1
# auswertbar oder die Leichtlast-Variante:
RedirectMatch ^.*/pvt_.*/.*$ /404.html
Das wäre aber nur ein Notbehelf.
Mit mod_rewrite (längst nicht immer aktiviert) geht auch
RewriteEngine On
[link:http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule@title=RewriteRule] ^(.*/pvt_.*/.*)$ /404.php?orig=$1
# auswertbar oder die Leichtlast-Variante:
RewriteRule .*/pvt_.*/ /404.html
Natürlich braucht beides die Erlaubnis, die Serverkonfiguration zu überschreiben. Ich habe in beiden Varianten auf die Prüfung des Moduls verzichtet, denn wenn das Modul nicht installiert und konfiguriert ist liefert der Server dann nur den 500er Fehler - was aber besser ist als die 'geheimen' Daten zu verbreiten.
<?php
header("HTTP/1.0 404 Not Found");
$orig='';
if ( isset($_GET['orig']) ) { $orig='/'.$_GET['orig']; }
echo ('<html><h1>Fehler 404</h1><p>Die Datei "' . htmlentities($orig) .'" ist nicht vorhanden.</p></html>' );
Hallo Jörg,
soweit ich das überschauen kann, zielen deine Lösungen darauf ab, dass ich entsprechende Anfragen auf die Verzeichnisse einfach auf eine 404-Fehlerseite weiterleite.
Da habe ich mich wohl nicht eindeutig genug in der Fragestellung ausgedrückt. Ich will das entsprechende Verzeichnis mit einem Passwortschutz über htaccess versehen. Mit der von dir genannten Lösung, könnte ich ja (vermutlich) selbst auch nicht mehr über den Webbrowser auf die Dateien zugreifen, was jedoch gewünscht ist.
Es handelt sich überwiegend um Testseiten, welche ich der Allgemeinheit (noch) nicht zur Verfügung stellen will, aber die über das Web sehr wohl erreichbar sein sollen (für Tests auf unterschiedlichen Systemen usw.).
Gruß
Alex
Da habe ich mich wohl nicht eindeutig genug in der Fragestellung ausgedrückt. Ich will das entsprechende Verzeichnis mit einem Passwortschutz über htaccess versehen. Mit der von dir genannten Lösung, könnte ich ja (vermutlich) selbst auch nicht mehr über den Webbrowser auf die Dateien zugreifen, was jedoch gewünscht ist.
Tja. "Schützen" kann viel heißen... da sieht man, was rauskommt wenn Fragen ungenau formuliert sind. Irgendwer (hier: ich) reißt sich den Arsch auf. Für's Archiv.
Bei Deinem Ansinnen hilft wohl nur LocationMatch, wie von Chris vorgeschlagen. <http://de.selfhtml.org/servercgi/server/htaccess.htm#verzeichnisschutz@title=Den Passwortschutz dann wie üblich> umd innerhalb von <LocationMatch "/prv_.*" > und <LocationMatch> und betreffs der Pfadangaben zur Passwort-Datei unbedingt Angaben, die absolut zum Dateisystem-Root sind.
Du brauchst dann halt Zugriff auf die Serverkonfiguration.
Jörg Reinholz
Da habe ich mich wohl nicht eindeutig genug in der Fragestellung ausgedrückt. Ich will das entsprechende Verzeichnis mit einem Passwortschutz über htaccess versehen. Mit der von dir genannten Lösung, könnte ich ja (vermutlich) selbst auch nicht mehr über den Webbrowser auf die Dateien zugreifen, was jedoch gewünscht ist.
Es handelt sich überwiegend um Testseiten, welche ich der Allgemeinheit (noch) nicht zur Verfügung stellen will, aber die über das Web sehr wohl erreichbar sein sollen (für Tests auf unterschiedlichen Systemen usw.).
Gruß
Alex
Ich benutze keinen Indianer. In nginx würde ich es so umsetzen.
Um es separat zu halten, einen Server-Block in default mit anderem Port anlegen. Aufruf im Browser mit xxx.xxx.xxx.xxx:8777/test/
server {
listen 8777;
root /test/;
index
index.html;
location /test/ {
alias /www/AAA/test/;
auth_basic "Hier Name und Passwort eingeben";
auth_basic_user_file /xxx/conf/htpasswd;
}
}