这样它/media/file.jpg
会在浏览器中打开并/media/file.jpg?dl=1
强制浏览器下载。
这是我当前的配置,但它不起作用:
location /media/ {
autoindex off;
root /home/my_app/media/;
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 365d;
add_header Pragma public;
add_header Cache-Control "public";
}
# Allow forcing download by query param `dl`
if ($arg_dl = "1") { # why this doesn't work?
add_header Content-disposition "attachment; filename=$1";
}
}
答案1
该if
语句永远不会被达到,因为只有location
在请求文件时才会匹配。
如果 URL/media/
在/home/my_app/media/
目录中,则不能root
这样使用。您需要使用alias /home/my_app/media/
或root /home/my_app/
。
你应该尝试这个(更新版本):
location ~* ^/media/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
autoindex off;
root /home/my_app/media/;
expires 365d;
add_header Pragma public;
add_header Cache-Control "public";
if ($arg_dl = "1") {
add_header Content-disposition "attachment; filename=$1";
}
}