在Nginx配置中是否可以将变量与重定向代码一起使用?

在Nginx配置中是否可以将变量与重定向代码一起使用?,nginx,nginx-config,Nginx,Nginx Config,在我的Nginx配置中,我有如下重定向规则: map $uri $target { '/test123' 'https://www.somedomain.com/test456'; } map $uri $target_code { '/test123' 301; } server { listen 80 default; if ($target_code = 301) { return 301 $target; } if ($t

在我的Nginx配置中,我有如下重定向规则:

map $uri $target {
    '/test123' 'https://www.somedomain.com/test456';
}
map $uri $target_code {
    '/test123' 301;
}
server {
    listen 80 default;

    if ($target_code = 301) {
        return 301 $target;
    }
    if ($target_code = 302) {
        return 302 $target;
    }
}
server {
    listen 80 default;

    return $target_code $target;
}
而且效果很好。但是关于

我想这样说:

map $uri $target {
    '/test123' 'https://www.somedomain.com/test456';
}
map $uri $target_code {
    '/test123' 301;
}
server {
    listen 80 default;

    if ($target_code = 301) {
        return 301 $target;
    }
    if ($target_code = 302) {
        return 302 $target;
    }
}
server {
    listen 80 default;

    return $target_code $target;
}
但是在重新启动期间,Nginx在/etc/Nginx/Nginx.conf中返回错误
Nginx:[emerg]无效的返回代码“$target\u code”


是否有可能以这种方式使用变量?或者,也许是另一种不使用if语句的方法?

从我所看到的情况来看,这就是。以下是守则的相关部分:

ret->status=ngx_atoi(p,值[1].len);
如果(ret->status==(uintptr\U t)NGX\U错误){
如果(cf->args->nelts==2
&&(ngx_strncmp(p,“http://”,sizeof(“http://”)1)=0
||ngx_strncmp(p,“https://”,sizeof(“https://”)1)=0
||ngx_strncmp(p,“$scheme”,sizeof(“$scheme”)-1)=0)
{
ret->status=NGX\u HTTP\u临时移动;
v=&值[1];
}否则{
ngx配置日志错误(ngx日志紧急,cf,0,
“无效的返回代码\%V\”,&值[1]);
返回NGX_CONF_错误;
}

首先,它尝试将第一个参数转换为整数。如果失败,它将检查该参数是否为URL。如果不是,它将退出错误。

您链接的文档仅与
位置
上下文中的
If
的使用有关。如果使用
映射
则需要一个条件语句来实现
返回,在普通的Nginx中,它需要一个
if
语句。据我所知,只有
return
指令中的重定向URL或响应体可以包含变量。我认为使用这种配置无法摆脱
if
语句。