Dateien (pdf, xls, ...) in Apache als Download forcieren

Ich finde es immer mühsam, wenn Dateien von Download-Links direkt im Broser geöffnet werden und das aktuelle Fenster "überschreiben". Eine unschöne Lösung finde ich auch, wenn Donload-Links jeweils mit einem "_blank" versehen sind und so ein neues Fenster geöffnet wird, welches je nach Browser dann leer stehen bleibt.

Optimal finde ich es, wenn immer der "Datei speichern" Dialog erscheint.

Grundsätzlich kann das im .htaccess sehr einfach mit einem Eintrag provoziert werden (z.B. für PDFs):

AddType application/octet-stream .pdf

Leider funktioniert das teilweise im IE nicht, da dieser noch "Content-Disposition attachment" im Header benötigt. Daher muss folgender Eintrag anstatt des AddTypes gemacht werden:

<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

Beziehnungsweise für mehrere Dateitypen:

<FilesMatch "\.(?i:pdf|avi|mpg|mov|txt|doc|docx|ppt|pptx|xls|xlsx|zip|mp4)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

Natürlich könnte man Dateien auch über PHP ausliefern und die Header-Daten darüber modifizieren. Ich finde es aber nicht optimal, wenn PHP Binary-Daten ausliefern muss, ausser wenn man über PHP Vorverarbeitungen machen will (z.B. Security Check).

Drupal

Wenn man bei Drupal den Eintrag für Downloads aus dem files-Verzeichnis machen will, dann muss dies in der .htaccess Datei unterhalb des files-Verzeichnisses gemacht werden!!