Wie sende ich Content-Disposition-Header in Apache für Dateien?


8

Ich habe ein Verzeichnis mit Textdateien, die ich mit Apache 2 bereitstelle. Wenn ich (oder ein Benutzer) auf die Dateien zugreife, werden sie normalerweise in ihrem Browser angezeigt. Ich möchte den Webbrowser zwingen, ein Dialogfeld zum Speichern unter zu öffnen. Ich weiß, dass dies mit den Content-DispositionHeadern möglich ist ( weitere Informationen ).

Gibt es eine Möglichkeit, dies für jede Datei zu aktivieren?

Idealerweise möchte ich so etwas:

<Directory textfiles>
   AutoAddContentDispositionHeaders On
</Directory>

Und dann würde Apache den richtigen Header für die Inhaltsdisposition festlegen, einschließlich der Verwendung desselben Dateinamens.

So etwas könnte mit der Apache- HeaderDirektive möglich sein.

Bonuspunkte, wenn es in Debache in Apache steht.

Ich könnte ein einfaches PHP-Wrapper-Skript erstellen, das ein filenameArgument aufnimmt , header(...)die Datei aufruft und dann druckt, aber dann muss ich Eingaben usw. validieren. Das ist Arbeit, die ich zu vermeiden versuche.


* Ich weiß, dass man im Web eigentlich nichts erzwingen kann

Antworten:


11

Ich habe festgestellt, dass dies tut, was ich will:

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

Wofür steht das "e" am Ende des Dateinamens? Ich sehe, dass es ohne es nicht funktioniert, aber ich verstehe nicht, was es tut.
Mark E. Haase

Es bedeutet nur "den Inhalt der benannten Umgebungsvariablen FILENAME" (siehe Dokumentation von mod_headers: httpd.apache.org/docs/current/mod/mod_headers.html )
Ale

1

mod_headers sollte das sein, wonach Sie suchen:

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

Ein guter Anfang, aber ich möchte auch den Dateinamen dort, damit der (gleiche) Dateiname angezeigt wird. Ich habe jedoch eine ähnliche Lösung gefunden
Rory
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.