Nginx
使用 Nginx 提供來自兩個不同目錄的圖像
這應該是基本的……我是全新的,沒有任何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; } }
關鍵是使用 nginx
rewrite
指令從 URI 中擷取重要部分,以便可以將其映射到任何目錄。該
root
指令僅更改文件根,並且 URI 按原樣附加到文件根,在這種情況下,這不是您想要的。