Seite 1 von 1

Ordnerzugriff verhindern

Verfasst: 18.02.2009, 20:13
von webpilot
Ich möchte den Zugriff auf mehrere Ordner (abc, 123 und xyz) per htaccess verhindern. Dazu habe ich folgenden Code in der htaccess:

Code: Alles auswählen

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^/abc
RewriteCond %{REQUEST_URI} ^/123
RewriteCond %{REQUEST_URI} ^/xyz
RewriteRule ^.* - [F]
Das funktioniert irgendwie nicht.

Weiterhin habe ich folgendes versucht:

Code: Alles auswählen

<FilesMatch "&#40;/abc|/123|/xyz&#41;">
	deny from all
</FilesMatch>
Das geht so natürlich auch nicht. Ich kenne mich damit zu wenig aus. Kann wer helfen?

Verfasst:
von

Re: Ordnerzugriff verhindern

Verfasst: 18.02.2009, 21:42
von Mork vom Ork
webpilot hat geschrieben:Ich möchte den Zugriff auf mehrere Ordner (abc, 123 und xyz) per htaccess verhindern. Dazu habe ich folgenden Code in der htaccess:

Code: Alles auswählen

RewriteEngine On
RewriteBase /

RewriteCond %&#123;REQUEST_URI&#125; ^/abc
RewriteCond %&#123;REQUEST_URI&#125; ^/123
RewriteCond %&#123;REQUEST_URI&#125; ^/xyz
RewriteRule ^.* - &#91;F&#93;
Das funktioniert irgendwie nicht.
Das ist vor allen Dingen gleich mehrfach ungeschickt:
- Erstens könnte es dir passieren, dass du mit einem Muster à la /abc nicht nur das Verzeichnis /abc/ erwürgst, sondern auch noch /abcde, /abc123 usw. Soll ein Verzeichnis angesprochen werden, den Pfad bzw. das Muster immer mit einem Schrägstrich enden lassen.
- Zweitens kann REQUEST_URI nicht gleichzeitig /abc, /123 und /xyz sein, daher funktioniert es auch nicht. Du müsstest die RewriteCond-Zeilen mit Oder verknüpfen.
- Drittens ist es zu viel Aufwand, für jeden einzelnen Pfad ein gesondertes Muster zu definieren. In Mustern lässt sich mit | ebenfalls eine Oder-Verknüpfung herstellen, bei FilesMatch hast du das doch auch gemacht.
- Viertens ist es unsinnig, wegen eines einfachen URI-Vergleiches REQUEST_URI hervorzukramen, RewriteRule vergleicht diesen Pfad ebenfalls.
- Fünftens ist es unsinnig, „Anfang, gefolgt von irgendwas“ (^.*) als Muster zu nehmen. „Irgendwas“ reicht vollkommen.

Bis hierhin RewriteRule ^(abc|123|xyz)/ - [F] (ohne jegliche RewriteCond), jedoch:

- Sechstens ist mod_rewrite zu viel Aufwand.
Weiterhin habe ich folgendes versucht:

Code: Alles auswählen

<FilesMatch "&#40;/abc|/123|/xyz&#41;">
	deny from all
</FilesMatch>
FilesMatch arbeitet offenbar nur mit Dateien, definitiv aber nur mit dem Basisnamen des Pfades, d.h. ein führender Schrägstrich hat darin nichts zu suchen. Wenn überhaupt, dann etwas in der Richtung ^(abc|123|xyz)$, eventuell mit abschließendem Schrägstrich vor dem Dollarzeichen - aber wie gesagt, mit Verzeichnissen scheint <Files> bzw. <FilesMatch> eh nicht zu funktionieren (daher wohl sinnigerweise auch der Name).

Bessere Lösungsansätze:
1. RedirectMatch 403 ^/(abc|123|xyz)/
2. In jedem betreffenden Ordner eine .htaccess mit der Zeile deny from all ablegen.

Verfasst: 18.02.2009, 21:49
von webpilot
Das nenne ich mal eine detailierte Antwort! :) Echt super - Besten Dank!

Die Lösung mit RedirectMatch gefällt mir besser, weil, wie du auch bereits angesprochen hast, kein modrewrite notwendig ist. Leider kann ich keine Datei in den Ordner packen, da diese immer serverseitig überschrieben werden (glaube ich zumindest).

RedirectMatch ist auch eine Traumlösung weil ich sogar einen 404 ausgeben kann. ;)

Viele Dank nochmals! 0X