Nginx映射部分URI

我想要一个类似

的映射
map $name $id {
    Bob 1;
}

(方案+域为$scheme://$host)。

我想将/$name/foo重定向到/bar?param=$id

我该怎么做?在示例中,我仅在地图中看到完整的URI。我希望没有

map $uri $mapped_uri {
    /Bob/foo /bar?param=1;
    /Joe/foo /bar?param=2;
}

因为这将复制硬编码部分。

cjz7366 回答:Nginx映射部分URI

例如:

map $name $id {
    Bob 1;
    Joe 2;
    ...
    default "some_value_for_unknown_name";
}

server {
    ...
    location ~ ^/([^/]+)/foo$ {
        set $name $1;
        rewrite ^ /bar?param=$id last;
    }
    ...
}

带有一组严格编码的预定义名称的更严格版本可能类似于location ~ ^/(Bob|Joe|...)/foo$ { ... }

,

您可以使用花药映射来捕获$name变量。这些发生在周期的早期,可以帮助避免在配置扩展时可能引起问题的正则表达式位置。

map $uri $name {
    ~^/([^/]+)/foo$ $1;
}

map $name $id {
    Bob 1;
    Joe 2;
}

server {
    if ($id) {
        return 302 /bar?param=$id;
    }
}
本文链接:https://www.f2er.com/3099279.html

大家都在问