捕获 URI 的一部分并使用它在 Nginx 中进行条件重写

捕获 URI 的一部分并使用它在 Nginx 中进行条件重写

我正在为 Nginx 配置编写位置块,它用于具有如下模式的 URI:www.mysite.com/a/b/blah/cwww.mysite.com/a/b/blah/c/n

其中ab是固定的,blah可能会有所不同,c只能是三个固定字符串(optionA、optionB、optionC)之一,并且n是从 0、1、2 等开始的数字。此外,只有当等于 optionBn时才有效,因此在任何其他情况下,如果 之后有任何内容,Nginx 都应立即抛出。c404c

我打算将位置块写为:

location ^~ /a/b/ {
    ...
}

我想在此位置内实现的逻辑是:首先c从给定的 URI 捕获,然后根据其值执行三种可能的重写之一。即

if (c = optionA) {
    rewrite ... ... break;
}

if (c = optionB) {
    rewrite ... ... break;
}

if (c = optionC) {
    rewrite ... ... break;
}

我的问题是:

  1. 我读到过,ifNginx 中一般应避免在 location 块中使用语句,但似乎 with 的使用rewrite是个例外。我在这里使用的方式会rewrite引起什么问题吗?

  2. 我如何c在此捕获并实现条件重写逻辑?

答案1

使用正则表达式,例如:www.mysite.com/(。)/(.)/blah/c 和 $1, $2 为建立的 url 的部分。

相关内容