2012-01-02 15 views
11

Tengo un directorio protegido por htaccess. Aquí está el código que uso ahora:Excluir una carpeta en el directorio protegido htaccess

AuthName "Test Area" 
Require valid-user 
AuthUserFile "/***/.htpasswd" 
AuthType basic 

Esto está funcionando bien. Sin embargo, ahora tengo un directorio dentro de esta carpeta al que me gustaría permitir el acceso de cualquier persona, pero no estoy seguro de cómo hacerlo.

Sé que es posible mover los archivos fuera del directorio protegido, pero para no ser demasiado largo, la carpeta debe permanecer dentro de la carpeta protegida, pero debe ser accesible para todos.

¿Cómo puedo restringir el acceso a la carpeta, pero permitir el acceso a la subcarpeta?

Respuesta

11

De acuerdo con this article puede lograrlo usando SetEnvIf. Haga coincidir cada una de las carpetas y archivos a los que desea acceder de forma general y defina una variable de entorno 'allow' para ellos. Luego agrega una condición que permite el acceso si esta variable de entorno está presente.

Debe agregar las siguientes directivas a su .htaccess.

SetEnvIf Request_URI "(path/to/directory/)$" allow 
SetEnvIf Request_URI "(path/to/file\.php)$" allow 
Order allow,deny 
Allow from env=allow 
Satisfy any 
+0

Gracias por su ayuda! –

+0

@SherwinFlight sigo el código anterior pero sigo preguntando la contraseña, cómo excluir el directorio para cargar imágenes – Nullpointer

+0

gracias hombre, sigue trabajando. –

24

Basta con crear un archivo .htaccess en el subdirectorio con el contenido:

Satisfy any

+3

Eso puede funcionar, pero ¿qué pasa si no hay un directorio debido a '' mod_rewrite' cosas. – janw

+0

Pon eso en un bloque Greg

0

No hay necesidad de crear un .htaccess en el subdirectorio.

Basta con crear tantas variables como sea necesario con SetEnvIf Directiva, y asegúrese de que el nombre del archivo o la ruta que desea allw/negar es parte de la expresión regular URI se pasa a SetEnvIf, exactamente igual que @ dijo Sumurai8 , pero configure la expresión regular para que se ajuste a sus necesidades, ya que el URI debe comenzar/finalizar/contener un conjunto de caracteres ............

0

La respuesta aceptada parece no funcionar bien con los nuevos Apache Versions, ya que dejó de funcionar tan pronto como las actualizaciones de Apache se implementaron en algunos de los servidores de mis clientes.

recomiendo el siguiente enfoque:

AuthType Basic 
AuthName "NO PUBLIC ACCESS" 
AuthUserFile /xxx/.htpasswd 

SetEnvIf REQUEST_URI "(path/to/directory/)$" ALLOW 

<RequireAny> 
    Require env ALLOW 
    Require valid-user 
</RequireAny> 
Cuestiones relacionadas