使用 .htaccess 强制文件下载
Posted
技术标签:
【中文标题】使用 .htaccess 强制文件下载【英文标题】:Force file to download with .htaccess 【发布时间】:2016-01-16 05:29:12 【问题描述】:所以我在 htaccess 中使用以下规则:
AddType SCHM wsc
<FilesMatch "\.(wsc)$">
ForceType SCHM
Header set Content-Disposition attachment
</FilesMatch>
但是当我转到file's location 时,它不会强制下载
【问题讨论】:
您使用的是哪个浏览器?我的 Chromium 45 下载文件 我使用的是 Chrome,但其他网站上的 similar file 对我有用,但我的 ftp 上的那个只是在浏览器中显示二进制文件 也许您还应该将Content-Type
设置为application/octet-stream
。我想有人会这样想:Header set Content-Type application/octet-stream
@JojOatXGME 我试过但没用
好的,因为它已经在我的电脑上工作了,我不知道为什么它不适合你。如果我的文件已经在缓存中,我已经看到服务器响应“未修改”。也许您的浏览器只是缓存文件并且不知道您已添加此标头条目。在这种情况下,只有文件的较新修改日期才会导致浏览器重新加载。您可以在 Linux 的 shell 中使用touch <filename>
来更改时间戳。
【参考方案1】:
由于问题已经在 cmets 中得到解答,这只是为了以 *** 指定的方式提供答案。
就像问题一样,它可以通过使用 Apache 2 的 mod_headers 来解决。由于Content-Disposition
不是HTTP 标准的一部分,您可以添加一些其他标头来实现您的目标。
<FilesMatch "\.(wsc)$">
Header set Content-Type application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
您应该考虑的另一件事是您的浏览器可能会缓存服务器的响应。浏览器仍将发送请求,但请求将包含一个节点,该节点表明浏览器已经拥有给定日期的文件。如果文件自给定日期以来未更改,则服务器不会将新标头发送到您的浏览器。这意味着如果您更改 .htaccess,在您禁用浏览器中的缓存或更改文件的时间戳之前,您可能看不到任何影响。
你也可以加
Header set X-Content-Type-Options "nosniff"
为了更好的兼容性(也许是安全性)。它防止浏览器进行 MIME 类型嗅探,这将忽略声明的内容类型。请参阅here 了解更多信息。
【讨论】:
这是正确的,但是(虽然不强制)文件名附加在附件处理类型之后,并且有“一些”浏览器(IE)嗅探二进制文件的前几个字节来猜测 mimetype ,这是一个完整的(呃)solution【参考方案2】:RFC2616 表示 19.5.1 Content-Disposition
如果此标头用于内容类型为 application/octet-stream 的响应中,则暗示用户代理不应显示响应,而是直接输入“将响应另存为...”对话框。
http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1
【讨论】:
以上是关于使用 .htaccess 强制文件下载的主要内容,如果未能解决你的问题,请参考以下文章