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