Принудительная загрузка с использованием <filesMatch> в htaccess в корне WWW
Я пытаюсь принудительно загрузить все файлы из одной папки.
Ссылка на страницу выглядит следующим образом:
<a href="#" onclick="location.href='http://example.com/uploads/documents/file.pdf'; return false;">Click to download</a>
И у меня есть этот фрагмент в моем .htaccess
<filesMatch ".*uploads/documents.*">
ForceType application/octet-stream
Header set Content-Disposition attachment
</filesMatch>
Я уже знаю, что 2 строки внутри тега работают, потому что он работает, когда я помещаю .htaccess прямо в папку, где я хочу принудительно загрузить следующий код:
<Files *.*>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
Кажется, что-то, что я не понимаю в теге filesMatch.
Ответы
Ответ 1
Пожалуйста, ознакомьтесь с документацией для FilesMatch и Files, соответственно. В нем четко указано
Директивы, приведенные в этом разделе, будут применены к любому объекту с базовым именем (последний компонент имени файла), соответствующим указанному имя файла.
Это означает, что в вашем примере оно соответствует file.pdf
. Второй пример *.*
соответствует file.pdf
, однако в вашем первом примере .*uploads/documents.*
нет. Это на самом деле никогда не может совпадать, поскольку в нем содержится косая черта, которая используется как разделитель каталогов.
Если вы можете отредактировать конфигурацию apache
В директиве Location
вы должны заключить <Files *.*>
или <Files *.pdf>
(в зависимости от того, что вы хотите обеспечить загрузку):
<Location "/uploads/documents/">
<Files *.*>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
</Location>
Если вы не можете отредактировать конфигурацию apache
К сожалению, директива Location не разрешена внутри файлов .htaccess. Просто создайте .htaccess внутри своего каталога /uploads/documents/
.
Ответ 2
Поиск более узнал этот код:
<FilesMatch "\.(mov|mp3|jpg|pdf|mp4|avi|wmv)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
Работал для меня.
Ответ 3
Этот код идеален, если вы не используете -
в имени файла!
Например, для имени-1.mp3 измените на name1.mp3
<FilesMatch "\.(mp3|avi)$" >
ForceType application/octet-stream
Header add Content-Disposition "attachment"
</FilesMatch>
Очистите браузер и проверьте его.