2017-05-19 3 views
1

try_filesディレクティブで404を返すには、いつも私のために失敗するように見える: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が見つかりません。 smallフォルダ内のtest.jpegイメージを返します。

try_filesにカスタム変数を使用することはできますか? 指令に$uriが使用されている以外は何も見たことがありません。

答えて

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'指令に変数を使用することは完全に正当ですか?後で私がオフィスに戻ったときにこれを試してみるでしょう)thanks – borislemke

+0

本当に可能であることを確認しましたカスタム変数で 'try_files'を使用する – borislemke

関連する問題