Necesito hacer una operación un poco extraña.
Primero, ejecuto en Debian, apache2 (que 'se ejecuta' como usuario www-data)
Entonces, tengo un archivo de texto simple con .txt ot .ini, o cualquier extensión, no importa.
Estos archivos se encuentran en subcarpetas con una estructura como esta:
www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fish/foobar.txt www.example.com/folder1/fruit/foobar .TXT
por lo tanto, el nombre del archivo siempre es el mismo, lo mismo para la 'jerarquía', solo cambie el nombre de la carpeta: /folder-name-static/folder-name-dinamyc/file-name-static.txt
Lo que debería hacer es (creo) relativamente simple: debo poder leer ese archivo por programas en el servidor (python, php, por ejemplo), pero si trato de recuperar el contenido del archivo por broswer (digitando la url www. example.com/folder1/car/foobar.txt, o vía cUrl, etc.) Debo obtener un error prohibido, o lo que sea, pero no acceder al archivo .
También sería bueno que incluso el acceso a esos archivos a través de FTP estén 'ocultos', o de todos modos no se puedan descargar (al menos eso uso con la raíz ftp y los datos del usuario)
¿Como lo puedo hacer?
Encontré esto en línea, se puso en el archivo .htaccess:
<Files File.txt>
Order allow, deny
Deny from all
</ Files>
Parece funcionar, pero solo si el archivo está en la raíz web (www.example.com / myfile.txt), y no en subcarpetas. Además, las carpetas en el segundo nivel (www.example.com/folder1/ fruit /foobar.txt) se crearán dinámicamente. Me gustaría evitar tener que cambiar el archivo .htaccess de vez en cuando.
Es posible crear una regla, algo así, que se aplica a todos los archivos con nombre, que está en * www.example.com / folder-name-static / * folder-name-dinamyc / *** file-name -static.txt *, donde esas partes son siempre iguales , solo ** ¿ese cambio ?
EDITAR :
Como dijo Dave Drager, podría ejemplificar esto manteniendo esos archivos fuera del directorio web accesible. Pero esos directorios también contendrán otros archivos, imágenes y cosas utilizadas por mis usuarios, así que simplemente trato de no tener un sistema de carpetas duplicadas, como:
/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]
//and, then for the 'secrets' files:
/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt
fuente
Sí, todo esto es posible. Sin embargo, si tiene programas en el servidor que necesitan acceder a archivos de texto, deben residir fuera de la raíz web. Por ejemplo, si sus archivos web están en ~ / public_html /, debe almacenarlos en ~ / data. No hay razón para colocarlos en la carpeta pública html.
Además de eliminarlos de la carpeta web, asegúrese de que los permisos de Unix estén configurados correctamente en ellos. El usuario de los scripts necesitaría tener acceso de lectura (¿escritura?), Pero nadie más tiene que tener este acceso.
Si necesita tener estos archivos en una carpeta accesible desde la web, hay formas de hacer lo que está pidiendo a través de mod_rewrite. Consulte el sitio siguiente para ver muchos ejemplos, uno de los cuales debe ajustarse a la factura.
http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/
fuente
¿Por qué no usar los permisos estándar de archivos Unix para negar el acceso al archivo?
Hay una explicación decente en wikipedia sobre los permisos de archivos Unix
fuente
Coloque el archivo .htaccess en el subdirectorio y en la instrucción, establezca AllowOverride All
fuente
Puede usar las ACL de Linux .
fuente
Después de leerlos a todos, noté que el archivo .htaccess puede ser el camino para mí: solo afecta los archivos en la carpeta donde está.
Pero mis carpetas se generan dinámicamente. No creo que copiar el archivo .htaccess o volver a crearlo cada vez que creo una nueva carpeta sea una forma confiable.
Como dijo Dave, la forma lógica debería ser almacenar los archivos de texto de configuración fuera de la carpeta accesible desde la web.
Pero en cada carpeta tengo que almacenar otros archivos, imágenes, por ejemplo, que deben ser accesibles para la web ... y todavía no creo que replicar la estructura de carpetas, dentro y fuera del directorio raíz de la web, también sea una forma confiable . Por lo tanto, necesitaré cambiar incluso la configuración de apache para incluir la carpeta de configuración en la ruta permitida de php ... de todos modos, esto no debería ser un problema.
Entonces, si no tengo el mejor , tengo que elegir el peor .
Usaré la solución de archivos múltiples .htaccess, por ahora, esperando no tener remordimientos en el futuro.
Cualquier otra solución es apreciada.
fuente
Desde la sección de documentación del pedido :
Entonces lo siguiente es incorrecto:
Lo siguiente es (más) correcto
fuente