2013-10-27 22 views
0

NGINX conf file regex全新手。我正在運行一個在NGINX Web服務器下運行的PHP腳本。我試圖讓訪問者下載一​​個與URL不同的附件。例如,如果該鏈接是:NGINX從後端的另一個URL下載文件

http://mysite.com/attachement/sample.jpg 

它實際上會從不同的目錄服務文件「媒體/上傳」

http://mysite.com/media/uploaded/sample.jpg 

根據一些研究,我加入了這樣的事情

location /attachment/ {  
    try_files $uri /media/uploaded/$uri; 
} 

但它不工作。我的意圖是不讓用戶瀏覽器重定向到正在查看URL的頁面,只需下載文件擴展名(如* .png,* .jpg,* .zip等)。此腳本在Apache中很喜歡這一點,但它不是在Nginx。

儘管這並不重要,但是想知道是否可以讓他們下載* .php,* .fla文件而不是因爲明顯的安全原因而執行它們。我記得很久以前使用支持票系統也是如此。不知道是否可以從Nginx的conf文件中獲得它。

謝謝。

回答

0

如果你希望他們像一個確切的鏡子,最簡單的方法是使用alias

location /attachment/ { 
    alias /media/uploaded; 
} 

如果你想使用try_files,那麼你需要指定root

location ~ /attachment/(.*) { 
    root /media/uploaded; 
    try_files $1 =404; # or replace '=404' with any fallback rule 
} 

您的規則沒可能是因爲$uri已經包含/attachment,所以正在測試的URL是/media/uploaded/attachment/image.jpg,它不存在,它可以像我在本文中那樣使用正則表達式來修復cond方法,但這樣做太多了,您的情況更適合alias

0

感謝您的提示。他們沒有工作,但能增加更多的代碼與別名

location ~ ^/attachment/([^\s]+(?=\.(jpg|gif|png|zip|))\.\2) { 
    alias /home/websites/public_html/media/uploaded/$1; 
} 

從另一篇文章得到一個提示這樣做(忘記它在哪裏)。謝謝!

+0

你的配置中是否有適當的'root',在服務器塊級? –