Come inviare le intestazioni di Content-Disposition in apache per i file?


8

Ho una directory di file di testo che sto servendo con apache 2. Normalmente quando io (o qualsiasi utente) accedo ai file li vedono nel loro browser. Voglio "forzare" * il browser Web per visualizzare una finestra di dialogo "Salva con nome". So che questo è possibile fare con le Content-Dispositionintestazioni ( maggiori informazioni ).

C'è un modo per attivarlo per ogni file?

Idealmente, vorrei qualcosa del genere:

<Directory textfiles>
   AutoAddContentDispositionHeaders On
</Directory>

E quindi apache imposterà l'intestazione di disposizione del contenuto corretta, incluso l'utilizzo dello stesso nome file.

Qualcosa del genere potrebbe essere possibile con la Headerdirettiva apache .

Punti bonus se è incluso stando in apache in debian.

Potrei fare un semplice script wrapper PHP che accetta un filenameargomento, effettua la chiamata header(...)e quindi stampa il file, ma poi devo valutare l'input ecc. Che lavoro sto cercando di evitare.


* So che in realtà non puoi forzare le cose quando si tratta di web

Risposte:


11

Ho scoperto che questo fa quello che voglio:

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

A cosa serve la "e" alla fine del nome del file? Vedo che non funziona senza di essa, ma non capisco cosa faccia.
Mark E. Haase,

Significa semplicemente "il contenuto della variabile d'ambiente denominata FILENAME" (vedere la documentazione di mod_headers: httpd.apache.org/docs/current/mod/mod_headers.html )
Ale

1

mod_headers dovrebbe essere quello che stai cercando:

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

Un buon inizio, ma voglio anche il nome del file in modo che appaia lo (stesso) nome del file. Tuttavia ho trovato una soluzione simile
Rory,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.