Dateizugriff sperren / .htaccess, FilesMatch
halodrio
- webserver
0 ChrisB0 halodrio0 Edgar Ehritt
Hallo,
Ich möchte den Zugriff in ein gesamtes Verzeichnis sperren, jedoch erlauben dass auf einen Dateityp zugegriffen werden darf.
Ich würde dies gerne mittels einer .htaccess Datei lösen.
Ich könnte mir folgendes vorstellen, jedoch klappt das nicht:
Alle sperren, und dann ".js" erlauben
<FilesMatch *>
Deny from all
</FilesMatch>
<FilesMatch "\.(js)$">
Allow from all
</FilesMatch>
Oder auch:
Alle sperren die nicht „.js“ sind:
<FilesMatch "\.^(js)$">
Deny from all
</FilesMatch>
Kann mir einer von euch meinen Fehler aufzeigen oder ist dies nicht möglich?
Danke für eure Hilfe.
Hi,
Ich könnte mir folgendes vorstellen, jedoch klappt das nicht:
„Funzt nich“ ist keine brauchbare Problembeschreibung.
</hilfe/charta.htm#tipps-fuer-fragende>
Alle sperren, und dann ".js" erlauben
<FilesMatch *>
Deny from all
</FilesMatch><FilesMatch ".(js)$">
Allow from all
</FilesMatch>
Wozu die runden Klammern um js?
> Oder auch:
> Alle sperren die nicht „.js“ sind:
>
> ~~~php
> <FilesMatch "\.^(js)$">
> Deny from all
> </FilesMatch>
>
^ steht für den Beginn der Zeichenkette. Dass vor diesem noch ein Punkt steht, ist unwahrscheinlich.
Um einen regulären Ausdruck zu negieren, nutzt der Apache das vorangestellte Ausrufezeichen.
Evtl. braucht es auch noch ORDER, um das gewünschte zu erreichen.
MfG ChrisB
Danke, Problem gelöst
Mit meiner Negation lag ich wirklich falsch, allerdings funktioniert die an dieser Stelle auch nicht. (Oder der reguläre Ausdruck ist (immer noch) falsch)
<FilesMatch "!\.js$">
Deny from all
</FilesMatch>
Dies führt nicht auf einen Fehler in der .htaccess, hat aber auch nicht die gewünschte Wirkung. !?!
Mein Code sieht nun so aus:
<FilesMatch ".">
Deny from all
</FilesMatch>
<FilesMatch "\.js$">
Allow from all
</FilesMatch>
<FilesMatch *> wie ich es zuvor hatte führt zu einem „Serverfehler“ mit dem Hinweis in der error.log des Servers „.htaccess: Regex could not be compiled“.
Danke
Und ein schönes Wochenende
Hallo halodrio,
Evtl. braucht es auch noch ORDER, um das gewünschte zu erreichen.
nicht nur eventuell:
Order Deny,Allow
Deny from all
<FilesMatch "\.js$">
Order Allow,Deny
allow from all
</FilesMatch>
Zu beachten ist hier nur der unwahrscheinliche Fall, dass eine DirectoryIndex benannte Datei, wenn sie nicht vollnamentlich im URL auftaucht, nicht ausgeliefert wird.
Zu Deiner anderen Frage:
Ich möchte mittels .htaccess einen Passwortschutz für ein Verzeichnis einrichten und diese dann auf mehreren Servern verwenden (localhost für die Entwicklung und den Server in der weiten Welt)
In der „AuthUserFile” ist aber leider der Serverpfad absolute codiert. Dieser Pfad ist in den verschiednen Servern dummerweise nicht gleich.
Gibt es eine Möglichkeit hier relativ zu arbeiten oder den Pfad aus irgendwelchen Umgebungsvariablen zu bekommen? Oder auch eine Fallunterscheidung je Server?
(AuthUserFile ./.htpasswd klappt leider nicht)Meine momentane config sieht wie folg aus:
AuthType Basic
AuthName "Restricted Directory"
AuthUserFile /htdocs/kunde/admin/.htpasswd
Deny from All
Satisfy any
Allow from 192.168.100.4
require valid-user
Du kannst hier nur mit einer Fallunterscheidung für den jeweiligen Server arbeiten. Beide sind nicht wirklich dafür konzipiert genau dieses Problem anzugehen.
1\. Variante: Arbeiten mit [<IfDefine>](http://httpd.apache.org/docs/2.2/mod/core.html#ifdefine) kann man nur, wenn man dem Serverprogramm beim Start Argumente mitgibt.
2\. Variante: Arbeiten mit [<IfVersion>](http://httpd.apache.org/docs/2.2/mod/mod_version.html#ifversion) kann man nur, wenn zwei unterschiedliche Serverversionen vorliegen.
Gruß aus Berlin!
eddi