Вот быстрый сниппет .htaccess, который заставит файлы загружаться, а не отображаться в браузере. Этот метод работает для любого сайта, работающего на сервере Apache.
Принудительная загрузка
По умолчанию PDF-документы, текстовые файлы и другие типы файлов отображаются в браузере, а не загружаются на локальную машину пользователя. Причиной этого является тип MIME по умолчанию, установленный Apache, который предписывает браузеру отображать, а не загружать. К счастью, тип MIME по умолчанию можно изменить, добавив следующую строку в корневой файл .htaccess вашего сайта:
AddType application/octet-stream pdf
Это изменит поведение файла так, что он будет загружаться, а не отображаться в браузере. Вы можете изменить тип файла с PDF на любой другой, отредактировав pdf
в соответствии с желаемым расширением. Можно указать несколько типов файлов:
AddType application/octet-stream pdf txt doc
Здесь мы добавили три расширения, pdf
, txt
и doc
. Таким образом, когда этот код будет добавлен в корень .htaccess, файлы PDF, TXT и DOC будут загружаться, а не отображаться.
Уточнение
Если вам нужно принудительно загрузить определенный файл (а не все файлы определенного типа), вы можете использовать директиву Apache <Files>
, например, так:
<Files magazine.pdf>
AddType application/octet-stream pdf
</Files>
Это будет соответствовать только файлам с именем magazine.pdf
в любом каталоге и заставит их загрузить. Для проверки только файлов, содержащихся в определенной директории, просто переместите код в файл .htaccess, расположенный в этой директории. Если нужный каталог не содержит файла .htaccess, вы можете создать его.
Несколько типов файлов
Вот еще один похожий пример, который показывает, как принудительно загрузить несколько типов файлов, плюс отправляет дополнительный заголовок, чтобы все было хорошо.
<FilesMatch ".(mov|mp3|jpg|pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
Здесь мы подбираем любой файл, имеющий расширение .mov
, .mp3
, .jpg
или .pdf
. Вы можете добавить или удалить расширения, отредактировав регулярное выражение, используемое в FilesMatch
. Если текущий файл соответствует одному из расширений в списке, он будет отправлен как application/octet-stream
с помощью директивы ForceType
. Кроме того, мы отправляем заголовок Content-Disposition
как вложение.