Как отправить заголовки Content-Disposition в apache для файлов?


8

У меня есть каталог текстовых файлов, которые я раздаю с Apache 2. Обычно, когда я (или любой пользователь) обращаюсь к файлам, они видят их в своем браузере. Я хочу «заставить» веб-браузер открыть диалоговое окно «Сохранить как». Я знаю, что это можно сделать с Content-Dispositionзаголовками ( подробнее ).

Есть ли способ включить это для каждого файла?

В идеале я хотел бы что-то вроде этого:

<Directory textfiles>
   AutoAddContentDispositionHeaders On
</Directory>

И тогда apache установит правильный заголовок расположения контента, в том числе используя то же имя файла.

Нечто подобное может быть возможно с помощью Headerдирективы apache .

Бонусные баллы, если они включены в Debian в apache.

Я мог бы сделать простой скрипт-обертку PHP, который принимает filenameаргумент, выполняет вызов header(...)и затем печатает файл, но затем мне нужно проверить ввод данных и т. Д., Этой работы я стараюсь избегать.


* Я знаю, что вы не можете навязывать вещи, когда дело доходит до Интернета

Ответы:


11

Я обнаружил, что это делает то, что я хочу:

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

Что означает «е» в конце имени файла? Я вижу, что это не работает без этого, но я не понимаю, что это делает.
Марк Э. Хаас

Это просто означает , что «содержимое переменной окружения с именем FILENAME» (см документацию mod_headers: httpd.apache.org/docs/current/mod/mod_headers.html )
Але

1

mod_headers должно быть то, что вы ищете:

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

Хорошее начало, но я также хочу, чтобы имя файла было там, чтобы оно всплыло (то же самое) имя файла. Однако я нашел подобное решение
Рори
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.