¿Proteger con contraseña un directorio, pero no los archivos de ese directorio?


8

Me preguntaba si era posible proteger un directorio con una combinación de nombre de usuario / contraseña utilizando archivos .htaccess y .htpasswd, pero no proteger los archivos dentro. es decir, se pueden vincular, por ejemplo, imágenes dentro de ese directorio a amigos, pero no se permitiría explorar el directorio sin un nombre de usuario / contraseña. Gracias a todos de antemano.

Respuestas:


9

Prueba esto en tu .htaccess:

Require valid-user

<Files ?*>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

Aquí Require valid-userrequiere cualquier inicio de sesión conocido. Luego, modifica esta restricción para archivos con al menos un carácter en su nombre, esto es lo que coincidirá con el patrón global ?*de la <Files>sección, lo que significa que las reglas adjuntas se aplican a los archivos, pero no a los directorios.

En las reglas modificadas para archivos, la clave es Satisfy any. Permite que la autorización sea satisfecha por las credenciales o la dirección IP. Luego permite que pase cualquier dirección IP, por lo que las solicitudes siempre están autorizadas.

Por lo tanto, ahora navegar por este directorio o cualquiera de sus subdirectorios requerirá un inicio de sesión, pero recuperar un archivo directamente de él no.

Que es lo que querías.


0

Sí, puede proteger los archivos y directorios por nombre o patrón. Ya debería usar esto para restringir el acceso a los archivos .ht *. Verifique su configuración de apache. El patrón de archivo requerido probablemente será '/ $'.


0

Use LocationMatchpara limitar las cosas de autenticación al índice del directorio.


<LocationMatch "/ pictures"> AuthUserFile /home/asdasd/public_html/user5678/pictures/.htpasswd AuthGroupFile / dev / null AuthName "Directorio restringido" AuthType Basic </LocationMatch> <Límite GET POST> requiere usuario válido </Limit> Este es mi archivo .htaccess actual, ubicado en / pictures. ¿Hay algo que estoy haciendo mal? Esto parece devolver un error interno del servidor 500.

a) leer sobre LocationMatch, requiere una expresión regular. b) Necesitas poner el require valid-userinterior del LocationMatchbloque, por supuesto (¿por qué la Limitdeclaración de todos modos?)
Marian

0

Solo desea desactivar la visualización de Apache en el índice de la carpeta. Pon esto en el .htaccess:

Options -Indexes

De esta manera, cuando los usuarios visitan http://www.url.com/folder/, obtienen un error de denegación de directorio . Pero cuando visitan http://www.url.com/folder/file.jpgpueden ver el archivo.


1
Esto no fue preguntado, esto desactiva los listados, no la contraseña los protege
Krzysztof Bociurko

-1

Si desea que la lista del directorio sea visible solo para usuarios autorizados pero permita que cualquiera descargue un archivo (para que pueda enviar enlaces de personas), entonces necesita un script de algún tipo (PHP, ASP, etc.) que le solicite al usuario una contraseña y, si la obtienen correctamente, muestra el contenido del directorio. Pondría este script en el directorio y lo nombraría como index.php para que se sirva en lugar de apache generando un índice de directorio.


-1

Si. Agregue un archivo index.html que enumere el contenido de la carpeta y restrinja el acceso a ese archivo con .htaccess. Si desea que el índice sea dinámico, deberá usar algún tipo de secuencia de comandos (o incluir en el lado del servidor) para generar el índice.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.