Prohibir el acceso al directorio excepto un solo subdirectorio con .htaccess
Tengo una siguiente estructura de directorio en el sistema de archivos:
/users/[uid1]/
/users/[uid2]/
etc. (la parte de UID es dinámica en la URL, como /users/abc123/
o /users/def456/
)
Dentro de uid-dirs también tengo algunos subdirectorios y archivos, por ejemplo: images-dir
another-dir
file1
file2
También tengo un archivo .htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]
Así que reescribo cada solicitud en index.php para enrutamiento, solo si el archivo solicitado no existe en el sistema de archivos.
¿Puedo de alguna manera prohibir el acceso a /users/[uid]/*
excepto images-dir
?
Por ejemplo, permita:
/users/123abc/images-dir/some-image.jpg
y negar:
/users/123abc/another-dir
/users/123abc/file1
Necesito denegar el acceso directo a estos subdirectorios Y si alguien intenta obtener el contenido de los archivos prohibidos, quiero enviar una solicitud a index.php
¿Es posible hacerlo con .htaccess?
Gracias
Respuestas
Supongo que tiene un solo .htaccess
archivo en la raíz del documento.
Puede hacer algo como lo siguiente antes de sus directivas existentes:
# 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+
coincide con <uid>
e incluye caracteres alfanuméricos y subrayados. Si <uid>
sigue un formato específico, entonces podría ser más específico aquí.
Si solo hace referencia a recursos estáticos en el /users/<uid>/...
espacio (es decir, sin URL virtuales), puede eliminar las comprobaciones del sistema de archivos anteriores, ya que sabe que cada solicitud tiene como objetivo un recurso del sistema de archivos.