0

$args 値に応じて書き換えを作成するために、nginx とそのマップ モジュール ( http://wiki.nginx.org/HttpMapModule ) を使用しています。私の設定は次のようになります:
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;
} 

問題は、ディレクティブ内に含めた file.conf 内で正規表現を使用できmapますか? だから私は次のようなものを書くことができます

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

したがって、/url1 にリダイレクトするときに他のすべての引数が保持されます。

よろしくお願いします。

4

1 に答える 1

1

/url1?$suffix第 2 引数では使用できません。変数または静的文字列のいずれかである必要があります。

これを試して:

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 に答える