我希望以下格式的每个请求:/files/(whatever..)/(1 or 2 or 3)
将使用files_1
命令转到/(whatevet)
上游。如果网址采用以下格式/files/(whatever..)/(4 or 5 or 6)
,则会使用files_2
命令转到/(whatevet)
上游。
这是我的位置文件:
location ~ "^/files/(.*)/[123]/" {
rewrite ^/files/(.*)/(.*) /$1 break;
proxy_pass http://files_1 ;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
}
location ~ "^/files/(.*)/[456]/" {
rewrite ^/files/(.*)/(.*) /$1 break;
proxy_pass http://files_2 ;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
}
当我检查日志时,它不会使用命令/files/save/2/
进行重定向(使用以下命令进入files_1
上游:/save
)
我该怎么做?
答案 0 :(得分:3)
您可能有另一个 location /
块将/files/save/2
重定向到/files/save/2/
,因为前者与您当前的位置块不匹配。
您可以使用rewrite
正则表达式中的命名捕获消除location
上的捕获,如下所示:
location ~ "^/files(?<command>.+)/[123]/" {
rewrite ^ $command break;
...
}
或者,更正rewrite
指令,以便仅提取命令:
rewrite ^/files(.+)/\d/ $1 break;
或:
rewrite ^/files/([^/]+)/ /$1 break;