如果url中有某个参数,则强制下载mime类型

时间:2017-04-29 15:15:04

标签: apache mime-types

我知道我可以强制下载特定文件夹中的所有文件或下载具有指定扩展名的所有文件。例如:

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

但是如果在请求网址中给出参数,我想强行下载文件,例如?download=true。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

能够在纯静态网站上基于URL自定义HTTP标头,而没有任何动态脚本语言及其安全问题,真是太好了。

标题的完整性检查适用性

  • 内容配置在RFC6266中进行了描述。
  • HTTP上下文中的Content-Type在RFC2616中进行了描述。

从理论上讲,只需要“内容处置”“附件”。

解决方案

将问题和第一条评论中的信息组合在一起对我有用:将下面的行放在包含文件的目录中或上方的.htaccess中。

<If "%{QUERY_STRING} =~ /download=true/">
ForceType application/octet-stream
Header add Content-Disposition "attachment"
</If>

Expressions in Apache HTTP Server中对此进行了说明,似乎不需要任何特定的Apache模块。

协议级测试

之前

curl -o /dev/null -v https://some.url/example.jpg 2>&1 | grep " Content"

< Content-Length: 1201533
< Content-Type: image/jpeg

curl -o /dev/null -v https://some.url/example.jpg?download=true 2>&1 | grep " Content"

< Content-Length: 1201533
< Content-Type: image/jpeg

之后

curl -o /dev/null -v https://some.url/example.jpg 2>&1 | grep " Content"

< Content-Length: 1201533
< Content-Type: image/jpeg

curl -o /dev/null -v https://some.url/example.jpg?download=true 2>&1 | grep " Content"

< Content-Length: 1201533
< Content-Disposition: attachment
< Content-Type: application/octet-stream

实践检验

结论

成功!