在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>
清除浏览器并检查它。