如何配置 nginx 以根据查询参数强制下载

如何配置 nginx 以根据查询参数强制下载

这样它/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";
    }
}

相关内容