Bagaimana cara mengirim header Disposisi Konten di apache untuk file?

8

Saya memiliki direktori file teks yang saya layani dengan apache 2. Biasanya ketika saya (atau pengguna mana pun) mengakses file yang mereka lihat di browser mereka. Saya ingin 'memaksa' * browser web untuk memunculkan kotak dialog 'Simpan sebagai'. Saya tahu ini mungkin dilakukan dengan Content-Dispositionheader ( info lebih lanjut ).

Apakah ada cara untuk mengaktifkannya untuk setiap file?

Idealnya saya suka yang seperti ini:

<Directory textfiles>
   AutoAddContentDispositionHeaders On
</Directory>

Dan kemudian apache akan mengatur header disposisi konten yang benar, termasuk menggunakan nama file yang sama.

Sesuatu seperti ini dimungkinkan dengan Headerarahan apache .

Poin bonus jika dimasukkan dengan berdiri di apache di debian.

Saya bisa melakukan skrip PHP wrapper sederhana yang mengambil filenameargumen, membuat panggilan ke header(...)dan kemudian mencetak file, tetapi kemudian saya harus memvalidasi input dll itu bekerja saya mencoba untuk menghindari.


* Saya tahu Anda tidak bisa memaksa hal-hal ketika datang ke web

Rory
sumber

Jawaban:

11

Saya telah menemukan bahwa ini melakukan apa yang saya inginkan:

<Location /textfiles>
    SetEnvIf Request_URI "^.*/([^/]*)$" FILENAME=$1
    Header set "Content-disposition" "attachment; filename=%{FILENAME}e"
    UnsetEnv FILENAME
</Location>
Rory
sumber
Untuk apa "e" di akhir nama file? Saya melihat bahwa itu tidak berhasil tanpanya, tetapi saya tidak mengerti apa fungsinya.
Mark E. Haase
Itu hanya berarti "isi dari variabel lingkungan bernama FILENAME" (lihat dokumentasi mod_headers: httpd.apache.org/docs/current/mod/mod_headers.html )
Ale
1

mod_headers harus menjadi apa yang Anda cari:

<IfModule mod_headers.c> 
  <Location ~ ".*/textfiles/.*"> 
    Header set Content-Disposition attachment
  </Location>
</IfModule>
Kristen
sumber
Awal yang baik, tetapi saya juga ingin nama file di sana sehingga muncul nama file (sama). Namun saya telah menemukan solusi serupa
Rory