我已经为某个位置实现了 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不存在,因此应该重定向至/api/general.zip
我尝试了 2 个位置块,出现了重复位置错误,并且我尝试使用 2 个 if 语句,但第二个语句被忽略了。
如果请求的是其他内容,例如/api/事件那么它应该转发到路由器页面。
答案1
如果是邪恶的,避免使用 if。你是 nginx 的初学者,可能你以前没有见过(检查本指南一个好的开始)。但实际上,避免 if。解决方案通常是try_files反而。
在你的情况下,不能使用唯一标识符try_file
,因为如果 zip 文件是两个字符,则需要应用特殊处理。但如果有两个位置,它应该可以工作。类似这样(未经测试):
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;
}