Назад | Перейти на главную страницу

Использование правил «папок» .htaccess для принудительного использования различных типов размещения содержимого?

Сейчас я использую 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 каталог загружены.