Verbieten Sie den Zugriff auf das Verzeichnis mit Ausnahme von nur einem Unterverzeichnis mit .htaccess

Jun 23 2020

Ich habe eine folgende Verzeichnisstruktur im Dateisystem:

/users/[uid1]/

/users/[uid2]/usw. (UID-Teil ist dynamisch in der URL, wie /users/abc123/oder /users/def456/)

Innerhalb von uid-dirs habe ich auch einige Unterverzeichnisse und Dateien zum Beispiel: images-dir another-dir file1 file2

Ich habe auch eine .htaccess-Datei:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]

Daher schreibe ich jede Anforderung für das Routing in index.php neu, nur wenn die angeforderte Datei im Dateisystem nicht vorhanden ist.

Kann ich irgendwie den Zugang zu /users/[uid]/*außer verbieten images-dir?

Erlauben Sie zum Beispiel:

/users/123abc/images-dir/some-image.jpg

und leugnen:

/users/123abc/another-dir

/users/123abc/file1

Ich muss den direkten Zugriff auf diese Unterverzeichnisse verweigern UND wenn jemand versucht, Inhalte verbotener Dateien abzurufen, möchte ich eine Anfrage an index.php senden

Ist es möglich mit .htaccess zu tun?

Vielen Dank

Antworten

MrWhite Jun 23 2020 at 07:13

Ich gehe davon aus, dass Sie eine einzelne .htaccessDatei im Dokumentenstamm haben.

Sie könnten vor Ihren bestehenden Richtlinien Folgendes tun:

# If the request maps to a file or directory in the /users/<uid> space
# But is not the "images-dir" then forbid access
RewriteCond %{REQUEST_URI} !^/users/\w+/images-dir/
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^users/\w+/ - [F]

\w+Entspricht dem <uid>und enthält alphanumerische Zeichen und Unterstriche. Wenn das <uid>folgende ein bestimmtes Format hat, können Sie hier genauer sein.

Wenn Sie nur auf statische Ressourcen im Bereich verweisen /users/<uid>/...(dh keine virtuellen URLs), können Sie die oben genannten Dateisystemprüfungen entfernen, da Sie wissen, dass jede Anforderung auf eine Dateisystemressource abzielt.