在WWW根目录的htaccess中使用<filesMatch>强制下载

我试图强制下载一个文件夹的所有文件。

页面上的链接如下所示

<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标签。

请分别查看FilesMatch和Files的文档。 它明确指出

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

这意味着在你的例子中,它匹配file.pdf 。 你的第二个例子*.*file.pdf匹配,但是你的第一个例子.*uploads/documents.*不能。 它实际上不能匹配,因为它包含一个斜杠,用作目录分隔符。

如果你可以编辑apacheconfiguration

您应该在Location指令中包含<Files *.*><Files *.pdf> (取决于您要执行下载的内容):

 <Location "/uploads/documents/"> <Files *.*> ForceType application/octet-stream Header set Content-Disposition attachment </Files> </Location> 

如果你不能编辑apacheconfiguration

不幸的是,Location指令不允许在.htaccess文件中。 只需在/uploads/documents/目录下创build一个.htaccess。

search更多的信息发现这个代码:

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

为我工作。

这个代码是完美的,如果你不使用-在文件名!

例如,对于名称1.mp3,更改为name1.mp3

 <FilesMatch "\.(mp3|avi)$" > ForceType application/octet-stream Header add Content-Disposition "attachment" </FilesMatch> 

清除浏览器并检查它。