在htaccess中使用<filesMatch>强制下载

neb*_*irl 11 .htaccess

我正在尝试强制下载一个文件夹的所有文件.

页面上的链接如下所示

<a href="http://example.com/uploads/documents/file.pdf">Click to download</a>
Run Code Online (Sandbox Code Playgroud)

而且我的.htaccess中有这个片段

<filesMatch ".*uploads/documents.*">
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</filesMatch>
Run Code Online (Sandbox Code Playgroud)

我已经知道标签内的2行是有效的,因为当我将.htaccess直接放在我想用以下代码强制下载的文件夹中时它可以正常工作:

<Files *.*>
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</Files>
Run Code Online (Sandbox Code Playgroud)

似乎有些东西我对filesMatch标签不了解.

Per*_*one 16

请分别查看FilesMatchFiles的文档.它明确指出

本节中给出的指令将应用于具有与指定文件名匹配的basename(filename的最后一个组件)的任何对象.

这意味着在您的示例中它匹配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>
Run Code Online (Sandbox Code Playgroud)

如果你不能编辑apache配置

不幸的是,.htaccess文件中不允许使用Location指令.只需在/uploads/documents/目录中创建一个.htaccess即可.

  • 我收到错误 - <Files>部分中不能出现<Files> - 不要再认为有效了. (3认同)

小智 16

搜索更多信息,找到此代码:

<FilesMatch "\.(mov|mp3|jpg|pdf|mp4|avi|wmv)$">
   ForceType application/octet-stream
   Header set Content-Disposition attachment
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

为我工作.