Nginx

使用 Nginx 提供來自兩個不同目錄的圖像

  • March 12, 2016

這應該是基本的……我是全新的,沒有任何Google搜尋和搜尋堆棧交換有幫助。

我有一個網站,我希望能夠提供來自不同目錄的圖像。我認為最簡單的方法是將 website.com/i/image.jpg 之類的內容映射到 root/i/ 的文件夾,然後將圖像放在那裡並完成它。所以這樣的事情應該有效,不是嗎?

location /i/ {
 /i/$uri;}

我不知道,我很難理解 nginx 語法。但我也想保持 URL 盡可能短,我相信我可以用正則表達式做一些奇特的邏輯,我可以從 /i/ 呼叫圖像,而不會弄亂從根目錄或其他文件夾呼叫的圖像。但我對語法感到很困惑。

我在 stackexchange 上的其他一些文章上看到人們試圖擷取一個字元串,我意識到如果我讓所有圖像的名稱都符合某種模式,我可以用一個 100% 的時間匹配的正則表達式位置來攻擊它,所以我可以保持 url 簡短,並且仍然將圖像與我沒用的圖像分開(我會解釋它們在目的上的差異,但我覺得這會離題)。

無論如何,我看到了這個文章

location ~ "^/s/([0-9a-zA-Z]{4,6})$" {...

並意識到這可能接近我所需要的。我在這個位置的所有文件都是 6 個字元長,只有 az,後跟任何副檔名。我認為這很簡單,我可以做類似的事情

location ~ "^([a-z]{6})$" {...

但無論我如何弄亂語法,我都無法讓它執行。任何人都可以對此有所了解嗎?

這是我根據ALex_hha的回答和farfie上面評論中的詳細資訊提出的建議。

server {
   listen      8989;
   server_name www.example.net;

   root /vhosts/www.example.net/public_html;

   location ~ "^/([a-z]{6})(.*)\.(jpg|png|svg)$" {
       rewrite ^/([a-z]{6})(.*)\.(jpg|png|svg)$" /vhosts/www.example.net/static/$1$2.$3;
   }
}

關鍵是使用 nginxrewrite指令從 URI 中擷取重要部分,以便可以將其映射到任何目錄。

root指令僅更改文件根,並且 URI 按原樣附加到文件根,在這種情況下,這不是您想要的。

引用自:https://serverfault.com/questions/763307