![nginx 位置正则表达式:未知“1”变量](https://linux22.com/image/707482/nginx%20%E4%BD%8D%E7%BD%AE%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%EF%BC%9A%E6%9C%AA%E7%9F%A5%E2%80%9C1%E2%80%9D%E5%8F%98%E9%87%8F.png)
我想制作一些可下载的视频,但我的策略似乎不起作用......
location ~* ^/(this-video.mp4)(/.*)$ {
alias /some/path/this-video.mp4;
add_header Content-Type 'video/mp4';
if ( $2 = "/dl" ) {
add_header Content-Disposition 'attachment; filename="$1"';
}
}
错误:
# nginx -t
nginx:[emerg] 未知“1”变量 nginx:配置文件 /etc/nginx/nginx.conf 测试失败
# nginx -v
nginx version: nginx/1.6.2
知道我做错了什么吗?
编辑:
顺便说一句,这个通过了测试:
location ~* ^/(this-video.mp4)(/.*)$ {
alias /some/path/$1;
add_header Content-Type 'video/mp4';
#if ( $2 = "/dl" ) {
# add_header Content-Disposition 'attachment; filename="$1"';
#}
}
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
所以这一定和引号有关吗?
编辑2
Nginx文档状态:
条件可能是以下任一种:
变量名称;如果变量的值为空字符串或“0”,则为 false;
因此,如果/dl
url 中没有提供,那么$2
应该是空字符串?
答案1
问题似乎是数字捕获无法通过块if
,可能是因为if
条件也可以是新的正则表达式。您可以使用命名捕获来解决这个问题,例如:
location ~* ^/(?<filename>.+\.mp4)(?<suffix>/.*)$ { ... }
然而,不建议使用某些类型的if
块,因此您可以考虑使用两个位置块:
location ~* ^/(.+\.mp4)/dl$ {
alias /some/path/$1;
add_header Content-Type 'video/mp4';
add_header Content-Disposition 'attachment; filename="$1"';
}
location ~* ^/(.+\.mp4) {
alias /some/path/$1;
add_header Content-Type 'video/mp4';
}
或者对于第二个位置来说更简单的东西(如果适用的话),比如包含指令的前缀位置root
。