nginx 位置正则表达式:未知“1”变量

nginx 位置正则表达式:未知“1”变量

我想制作一些可下载的视频,但我的策略似乎不起作用......

  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;

因此,如果/dlurl 中没有提供,那么$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

相关内容