Как отправить заголовки 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>
Кристиан
источник
Хорошее начало, но я также хочу, чтобы имя файла было там, чтобы оно всплыло (то же самое) имя файла. Однако я нашел подобное решение
Рори