2017-05-19 65 views
1

try_files指令似乎總是失敗對​​我來說:try_files總是返回404變量

... 

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未找到。它應該返回small文件夾中的test.jpeg圖像。

是否有可能根據自定義變量try_files?我從來沒有見過除$uri被用於try_files指令之外的其他東西。

回答

1

if聲明不會在location塊出於某種原因在裏面工作,但已知的location塊內使用if造成問題。請參閱this application note

此外,所有nginx URI以前導/開頭。因此,if塊內的$do_resize應該是/small$uri

例如:

set $do_resize $uri; 
if ($arg_resize != '') { 
    set $do_resize /small$uri; 
} 

location /media { 
    try_files $do_resize $do_resize/ @fallback; 
} 
+0

開溜!我一直在撓頭,爲什麼有時候這個請求會表現得很奇怪,而有些時候卻不會。這正是你所提到的鏈接中所解釋的:(因此,對'try_files'指令使用變量是完全合法的嗎?當我回到辦公室時,我會試試這個。謝謝 – borislemke

+0

我已經證實它確實可行對自定義變量使用'try_files'。謝謝 – borislemke