如何简化 Nginx 映射正则表达式规则?

如何简化 Nginx 映射正则表达式规则?

我不知道这个问题是否允许。如果不行,请原谅我:)
无论如何,我有一个用于 nginx 重定向的映射规则

/hotel/xyz/abc  /hotel/xyz/abc-nana;
/hotel/xyz/abc/  /hotel/xyz/abc-nana;
~^/hotel/xyz/abc\?(.*) /hotel/xyz/abc-nana?$1;

我的问题是,它们可以合并成一条规则吗?我不太了解正则表达式

答案1

我假设xyzabc指的是任何字母数字字符串。然后你要寻找这样的规则:

location ~ ^/hotel/([0-9a-z]+)/([0-9a-z]+)/?$ {
    rewrite ^ http://$host/hotel/$1/$2-nana$is_args$args permanent;
}

(0-9a-z]+)匹配任何具有一个或多个匹配项的字母数字字符串。结果存储在$1$2变量中。最后一个斜线匹配是可选的(?指定 0 或 1 个匹配项)。

在 nginx 中,无法在locationorrewrite语句中匹配查询参数。但是,如果您只想添加可能的查询参数而不修改重定向,那么$is_args$args就足够了。

相关内容