在Nginx重写中处理多个参数

时间:2010-04-22 10:32:41

标签: regex http url nginx rewrite

我有一个nginx调用的重写:

        location ~* (css)$ {
rewrite ^(.*),(.*)$ /min/index.php?f=$1,/min/$2 last;
        }

它在这样的网页上使用:

http://domain.com/min/framework.css,dropdown.css

所有精致和花花公子,但它不可扩展。向URL添加另一个元素意味着我必须直接编辑nginx配置。理想情况下,我希望根据通过URL传递多少逗号分隔参数来重写nginx,而不是在配置中设置固定数量。这可能吗?

1 个答案:

答案 0 :(得分:1)

据我所知,没有使用纯正则表达式的解决方案。但您可以使用Perl功能,例如

http {
  perl_set $css_uri_arg 'sub {
    my $r = shift;
    my ($first,@rest) = split(/,/, $r->uri);
    join(',', ($first, map { "/min/$_"; } @rest));
  }';

  server {
    location ~* (css)$ {
      rewrite ^ /min/index.php?f=$css_uri_arg last;
    }
  }
}

默认情况下,Perl模块没有内置到Nginx中,您应该在构建时将其打开。文档为here