nginx地图模块 - 在包含文件中使用正则表达式

问题描述:

我使用nginx及其地图模块(http://wiki.nginx.org/HttpMapModule)根据$ args值创建重写。 我的配置如下所示:
nginx.confnginx地图模块 - 在包含文件中使用正则表达式

map $args $myvar { 
    default 0; 
    include /path/to/file.conf; 
} 

file.conf具有类似:

foo=1 /url1; 
foo=2 /url2; 
.... 
foo=n /urln; 

事后我使用$ MYVAR对重定向这样

location = /somepage.html { 
    if ($myvar !~ 0) { 
     rewrite^$myvar? permanent; 
    } 
    rewrite^/mydefaultpage/? permanent; 
} 

问题是:我可以在我的file.conf中使用正则表达式,它包含在我的map指令中吗?所以我可以写类似

~^foo=1(&<suffix>.*)$ /url1?$suffix; 

因此当重定向到/ url1时保留所有其他参数。

在此先感谢您的帮助!

您不能在第二个参数中使用/url1?$suffix。它必须是变量或静态字符串。

试试这个:

map $arg_foo $redirect_to { 
    default /mydefaultpage/; 
    include /path/to/file.conf; 
} 

location = /somepage.html { 

    set $redirect_args $args; 

    if ($args ~ "^(?:(.+)&)?foo=[^&]*(?:&(.+))?$") { 
     set $redirect_args $1&$2; 
    } 

    return 301 $redirect_to?$redirect_args; 
}