我有这个代码:
map $arg_dl $mimetype {
1 application/octet-stream;
default video/mp4;
}
server {
listen 80;
server_name example.com www.example.com;
root /usr/share/nginx/html;
index index.html;
location ~ \.mp4$ {
types {
$mimetype mp4;
}
default_type $mimetype;
}
error_page 404 /404.html;
问题是,如果我在视频链接中插入 .mp4? dl = 1,我可以正确下载视频,但如果我使用 url .mp4 或 .mp4? dl = gfgfgf 打开视频链接,浏览器无论如何都会下载视频。我该如何解决?只有当查询中有一个并且有其他参数才能以流式传输方式观看视频时,我才需要下载视频。我该怎么办?谢谢
答案1
显然,您无法在块内或使用映射变量设置types
和。一种解决方案是在标记中使用特殊 URI 来处理您需要的特定 MIME 类型。default_type
if
location
internal
server {
...
root /usr/share/nginx/html;
location ~ \.mp4$ {
if ($arg_dl) { rewrite ^ /download$uri last; }
...
}
location ^~ /download/ {
internal;
alias /usr/share/nginx/html/;
types {}
default_type application/octet-stream;
expires -1;
}
...
}
修饰符^~
可避免与其他正则表达式位置产生歧义。 可防止internal
被/download
直接访问。location
和alias
应都以 结尾,/
或都不以 结尾/
。