Сейчас я использую CDN с исходной доставкой для быстрого распространения файлов. Он извлекает файлы из источника, включая «тип» файла (сейчас загрузка / октект-поток), и выводит его клиенту.
Для этого у меня есть следующая структура веб-сервера:
http://www.server.com/files/code/file.mp4
В каталоге «files» я поместил файл .htaccess для принудительной загрузки (в противном случае он просто начал бы потоковую передачу видеофайла):
<Files *.*>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
Теперь я хотел бы разрешить как загружаемые файлы, так и потоковые файлы из одной папки. Поскольку вы можете создавать «псевдонимы» папки, используя тот же файл .htaccess, я хотел бы создать следующее:
http://www.server.com/files/code/file.mp4 -> download
http://www.server.com/streams/code/file.mp4 -> "stream" exactly the same file
Как это может быть сделано?
ForceType application/octet-stream
Нет необходимости отменять верный Content-Type
для принудительной загрузки. Установка соответствующего Content-Disposition
header должно хватить во всех современных браузерах.
вы можете создавать «псевдонимы» папки, используя тот же файл .htaccess
Да вроде как. Хотя вы не сможете использовать то же самое .htaccess
в /files
каталог - если это вы имеете в виду?
Попробуйте следующее ... удалите .htaccess
файл в /files
каталог и добавьте следующие директивы в .htaccess
файл в корне документа (или соответствующем подкаталоге). Эти директивы, возможно, должны быть ближе к началу, если у вас есть существующие директивы - порядок может иметь значение.
RewriteEngine On
# Force download all direct requests to the ./files directory
RewriteCond %{REDIRECT_STATUS} ^$
RewriteRule ^files/ - [E=FORCE_DOWNLOAD:1,T=application/octet-stream]
# Internally rewrite requests for ./streams to ./files
RewriteRule ^streams/(.+) files/$1 [L]
# Only set the Content-Disposition header when forcing a download
Header set Content-Disposition attachment env=FORCE_DOWNLOAD
Приведенный выше код по-прежнему отменяет Content-Type
при принудительной загрузке (т.е. T=application/octet-stream
флаг на RewriteRule
). Хотя считаю, что этого следует избегать.
В RewriteCond
директива проверка против THE_REQUEST
REDIRECT_STATUS
предотвращает запросы на ./streams
"виртуальный" каталог тоже загружается. Это гарантирует, что только «прямые» запросы на ./files
каталог загружены.