Nginx 查询关键字在位置匹配

Nginx 查询关键字在位置匹配

我有以下内容

location ~ "/foo/(.+)\.\w{3}$" {
  alias /srv/DM/pictures/store/$1;
}

这正是我想要的,除了一个小例外。如果有查询关键字附加到我希望它不匹配的位置:

MATCH: http://foo/bar.jpg
NO: http://foo/bar.jpg?s_thumb
NO: http://foo/bar.jpg?large_thumb

关于如何实现这一目标有什么想法吗?

答案1

这是不可能的,因为位置只会匹配没有查询参数的 URI。您需要在位置内使用 if 以及http://wiki.nginx.org/HttpCoreModule#.24arg_PARAMETER

if ($is_args) {
    break;
}

答案2

这是我最终成功的方法。你不能简单地将alias语句内部if。但是,您可以使用内部的重定向

server {

  ...;

  location /_image {
    internal;
    alias /srv/DM/pictures/store/;
  }

  location / {

    ...;

    if ( $args = '' ) {
      rewrite "/image/(.*)\.\w{3}$" /_image/$1 last;
    }

    ...;

}

相关内容