Pregunta ¿Cómo enviar encabezados de disposición de contenido en apache para archivos?


Tengo un directorio de archivos de texto que estoy sirviendo con apache 2. Normalmente, cuando yo (o cualquier usuario) accedo a los archivos que ven en su navegador. Quiero 'forzar' * el navegador web para que aparezca un cuadro de diálogo 'Guardar como'. Sé que esto es posible hacer con el Content-Disposition encabezadosmás información).

¿Hay alguna manera de activar eso para cada archivo?

Idealmente me gustaría algo como esto:

<Directory textfiles>
   AutoAddContentDispositionHeaders On
</Directory>

Y luego apache establecería el encabezado de disposición de contenido correcto, incluido el uso del mismo nombre de archivo.

Algo así podría ser posible con el apache. Header directiva.

Puntos de bonificación si se incluyen parándose en apache en debian.

Podría hacer un simple script de envoltura de PHP que toma en una filename argumento, hace la llamada a header(...) y luego imprime el archivo, pero luego tengo que validar la entrada, etc. Es un trabajo que estoy tratando de evitar.


* Sé que no puedes forzar las cosas cuando se trata de la web


7
2018-01-12 16:12


origen




Respuestas:


He descubierto que esto hace lo que quiero:

<Location /textfiles>
    SetEnvIf Request_URI "^.*/([^/]*)$" FILENAME=$1
    Header set "Content-disposition" "attachment; filename=%{FILENAME}e"
    UnsetEnv FILENAME
</Location>

10
2018-01-12 16:53



¿Para qué sirve la "e" al final del nombre del archivo? Veo que no funciona sin él, pero no entiendo lo que hace. - Mark E. Haase
Simplemente significa "el contenido de la variable de entorno llamada FILENAME"(ver documentación de mod_headers: httpd.apache.org/docs/current/mod/mod_headers.html) - Ale


mod_headers Debería ser lo que buscas:

<IfModule mod_headers.c> 
  <Location ~ ".*/textfiles/.*"> 
    Header set Content-Disposition attachment
  </Location>
</IfModule>

1
2018-01-12 16:32



Un buen comienzo, pero también quiero el nombre de archivo allí para que aparezca el (mismo) nombre de archivo. Sin embargo he encontrado una solución similar - Rory