我正在为 Nginx 配置编写位置块,它用于具有如下模式的 URI:www.mysite.com/a/b/blah/c
或www.mysite.com/a/b/blah/c/n
。
其中a
和b
是固定的,blah
可能会有所不同,c
只能是三个固定字符串(optionA、optionB、optionC)之一,并且n
是从 0、1、2 等开始的数字。此外,只有当等于 optionBn
时才有效,因此在任何其他情况下,如果 之后有任何内容,Nginx 都应立即抛出。c
404
c
我打算将位置块写为:
location ^~ /a/b/ {
...
}
我想在此位置内实现的逻辑是:首先c
从给定的 URI 捕获,然后根据其值执行三种可能的重写之一。即
if (c = optionA) {
rewrite ... ... break;
}
if (c = optionB) {
rewrite ... ... break;
}
if (c = optionC) {
rewrite ... ... break;
}
我的问题是:
我读到过,
if
Nginx 中一般应避免在 location 块中使用语句,但似乎 with 的使用rewrite
是个例外。我在这里使用的方式会rewrite
引起什么问题吗?我如何
c
在此捕获并实现条件重写逻辑?
答案1
使用正则表达式,例如:www.mysite.com/(。)/(.)/blah/c 和 $1, $2 为建立的 url 的部分。