mod_rewrite помогает изменить Content-disposition на основе URI

У меня есть каталог mp3-файлов, которые я хочу иметь, чтобы иметь возможность обслуживать их встроенными или давать пользователю возможность загрузки на основе URI запроса.

/media/file1.mp3 — в этом случае я просто хочу передать файл и позволить браузеру воспроизвести его.

/media/download/file1.mp3 — в этом случае я хочу упростить пользователю загрузку файла.

Я смог сделать это с помощью mod_rewrite и php (используя функции header() и readfile()), но я бы предпочел сделать все это с помощью mod_rewrite, mod_header и т. д., если это возможно.


person syncopated    schedule 15.09.2009    source источник


Ответы (2)


С помощью mod_rewrite вы можете изменить только некоторые определенные поля заголовка, к которым не принадлежит поле заголовка Content-Disposition. Вы можете изменить только поле заголовка Content-Type:

RewriteRule ^media/[^/]+\.mp3$ - [L,T=audio/mpeg]
RewriteRule ^media/download/[^/]+$ - [L,T=application/octet-stream]

И если вы хотите использовать mod_headers+mod_setenvif решение:

SetEnvIf Request_URI ^/media/download/ force-download

<IfDefine force-download>
    Header set Content-Disposition attachment
    Header set Content-Type application/octet-stream
</IfDefine>
person Gumbo    schedule 15.09.2009
comment
Спасибо. Я безуспешно пытался это сделать: SetEnvIF Request_URI ^/media/download force-download=1 Заголовок set Content-Disposition вложение env=force-download - person syncopated; 18.09.2009

IfDefine проверит переменные, установленные при запуске Apache, поэтому это не сработает. Допустимой конфигурацией будет:

SetEnvIf Request_URI ^/media/download/ force-download
Header set Content-Disposition attachment env=force-download

Также изменение Content-Type не обязательно для принудительной загрузки.

person Angel Abad Cerdeira    schedule 24.02.2011