try_files
指令似乎总是对我失败:
...
root /images;
location /media {
set $do_resize $uri;
# if ?resize=blah query present, rewrites do_resize to small/$uri
if ($arg_resize != '') {
set $do_resize 'small/${do_resize}';
}
try_files $do_resize $do_resize/ @fallback;
}
# placeholder for image resize server
location @fallback {
add_header Content-Type text/html;
return 200 "not found :/";
}
我的文件夹结构:
| images
| test.jpeg
| small
test.jpeg
请求http://foo/media/test.jpeg
时,它会正确返回图像。但是在请求http://foo/media/test.jpeg?resize=blah
时,它返回404未找到。它应该返回test.jpeg
文件夹中的small
图像。
是否可以try_files
使用自定义变量?除了$uri
以外,我从未见过try_files
指令以外的其他内容。
答案 0 :(得分:1)
由于某种原因,if
语句在location
块中无效,但已知在if
块内使用location
会导致问题。见this application note。
此外,所有nginx
URI都以前导/
开头。因此,$do_resize
块中的if
应为/small$uri
。
例如:
set $do_resize $uri;
if ($arg_resize != '') {
set $do_resize /small$uri;
}
location /media {
try_files $do_resize $do_resize/ @fallback;
}