Принудительная загрузка с помощью <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>

Очистите браузер и проверьте его.

Другие вопросы по тегам