每个位置的Nginx多重重写规则

我有一个工作nginx重写的位置,但在一个特定的请求的情况下,我想重写到一个不同的位置。

location /api { if (!-e $request_filename){ rewrite "^/api/.{2}\.zip" /api/general.zip last; break; rewrite ^/api/(.*)$ /api/router.php?rest_data=$1 last; break; } } 

所以如果有人要求/api/uk.zip,那么它下载的很好,但/api/fr.zip不存在,所以它应该redirect到/api/general.zip

我已经尝试了2个位置块,我得到了一个重复的位置错误,我试着用2个if语句,但是第二个被忽略。

如果请求是针对其他事情的,比如/ api / events,则应该转发到路由器页面。

如果是邪恶 ,请避免使用if。 你是nginx的开始,也许你之前没有看到过(查看本指南的一个好的开始)。 但是,真的,如果。 解决scheme通常是try_files 。

在你的情况下,不能使用唯一的try_file ,因为如果zip文件是两个字符的话,你需要应用一个特殊的处理。 但有两个地点,它应该工作。 类似的东西(未经testing):

 location ^~ "/api/([0-9a-zA-Z]{2}).zip" { try_files $uri /api/general.zip; } location ^~ "/api/(.*)" { try_files $uri $uri/ /api/router.php?rest_data=$1; }