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;
}