2014-06-06 84 views
0

我的文件夾結構:nginx的後備如果重寫失敗

在/ var/WWW/puenktchenunda /公/ IMG /科目

在/ var/WWW/puenktchenunda /公/ IMG/subjects_min

科目包含即「原始」文件。 Subjects_min包含將定期創建的壓縮圖像。該URL呼叫將轉到主題:

/img/subjects/img1.png

應該發生什麼:

  1. 重寫subjects_min
  2. 如果/img/subjects_min/img1.png不存在,爲它服務
  3. 如果/img/subjects_min/img1.png不存在,服務形象從/img/subjects/img1.png

步驟1和2可以很好地工作。該工程與此位置塊:

location ~* ^.*\/img\/sujets\/.*.(jpg|png|jpeg|gif) { 

    root /var/www/puenktchenunda/public; 
    rewrite /img/sujets/(.*)$ /img/sujets_min/$1; 
    #try_files /img/sujets_min/$URI /img/sujet/$URI; 

}

但我真的不知道如何完成其​​餘部分。有任何想法嗎?

更新

這是我目前的版本。這工作正常,除了sujets_big位置塊。最後有1美元的問題。整個塊表達式在$ 1之後添加,而不是括號中的表達式。

location ~ /img/sujets/(.*.png)$ { 
    root /var/www/puenktchenunda/public/; 
    try_files /img/sujets_min/$1 /img/sujets_big/$1; 
} 


location ~ /img/sujets_big/(.*.png)$ { 
    root /var/www/puenktchenunda/public/img/sujets/$1; 
} 

回答

0

試試這個邏輯

location ~* ^/img/subjects/([\w\-]+\.(?:jpe?g|png|gif))$ { 

    root /var/www/puenktchenunda/public; 

    set $imgfilename /img/subjects_min/$1; 

    if (-f $document_root$imgfilename) { 

     rewrite . $imgfilename break; 

    } 

} 
+0

HM,它說:「nginx的:EMERG]未知的‘根’變量」 – rapsli

+0

,當我用它與附加太多的問題的完整路徑替換$根,包括整個表達的位置。 – rapsli

+0

@rapsli嘗試變量而不是「$ 1」。用'$ document_root'編輯。 – Deadooshka