Verbieten Sie den Zugriff auf das Verzeichnis mit Ausnahme von nur einem Unterverzeichnis mit .htaccess
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
Ich gehe davon aus, dass Sie eine einzelne .htaccess
Datei 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.