在Nginx配置中是否可以将变量与重定向代码一起使用?
在我的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
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
语句。