0

我正在使用 nginx 及其地图模块(http://wiki.nginx.org/HttpMapModule)根据 $args 值创建重写。我的配置如下所示:
nginx.conf

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

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

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

从而在重定向到 /url1 时保留所有其他参数。

在此先感谢您的帮助!

4

1 回答 1

1

您不能/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;
}
于 2012-06-26T12:55:18.617 回答