2012-12-17 81 views
0

我一直在試圖圍繞今天nginx的重寫,並已看過一些問題,讓我的頭/答案在這裏,以及仔細閱讀幾個導遊我也碰到過。簡單nginx的重寫問題

雖然大多數事情來找我很自然地,我只是不抓它,也許是因爲我缺乏經驗與任何形式的正則表達式。

我有一個的download.php腳本,它覆蓋了我的nginx的頭和強制瀏覽器使用「另存爲」對話框,而不是打開一個新頁面進行下載。

它完美,但是我想隱藏用戶的腳本本身的URL。

具體而言,我想改變這個網址:

http://www.example.com/scripts/download.php?id=http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg 

這樣把它簡單地表現爲id GET參數的用戶:

http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg 

但是對於我,我的生活似乎無法使其工作。

希望有人能來救援。提前致謝。

編輯:

只是一些進一步明晰添加到我的問題......理想的解決方案將是我能在我的web應用程序像這樣的鏈接:

http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg?dl=1 

有nginx的拿起它具有DL = 1,是在/ images /目錄,然後重寫它使用的下載腳本:

http://www.example.com/scripts/download.php?id=http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg 

通過這種方式,當圖像僅被查看時,他們正在瀏覽腳本,並且只有當dl = 1 param時,imges纔會被重寫並通過腳本路由。

回答

1

如果我正確理解您的問題,您希望將鏈接如http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg&dl=1放入您的網絡應用中,並且當用戶單擊鏈接時,它們會被重定向到download.php腳本中?

重寫以下指令要做到的是,假設你重定向到同一主機。這將適用於開始/images/查詢參數dl=1任何 URL路徑。這將做302(臨時)重定向。如果您想要永久(301)重定向,請將redirect替換爲permanent

location /images/ { 
    if ($args ~ "dl=1") { 
     rewrite ^/images/(.*)$ /scripts/donwloads.php?id=$scheme://$host/images/$1 redirect; 
    } 
} 

如果你正在嘗試走另外一條路(有鏈接到的download.php腳本,但將用戶重定向到實際資源的URL - 不知道爲什麼,可能是一個壞主意,做這樣的盲目重定向),你可以用這個指令做(這將是值得檢查id查詢字符串參數有)

location /scripts/download.php { 
    rewrite ^(.*)$ $arg_id? permanent; 
} 

讓我知道,如果這兩種解決方法是在你想要去的方向,我們可以通過調整它適合您的需求。

+0

感謝myanimal,您的幫助真的很感激。您的第一個解決方案非常接近我需要做的事情,但它只需要應用於我指定的鏈接,而不是將所有/ images/traffic路由到腳本。理想情況下,如果我可以簡單地在應用程序的鏈接末尾添加?dl = 1參數,那麼nginx會選擇並重寫那些鏈接(我在腳本本身中執行大量安全性),那麼這將是絕對完美的解決方案。非常感謝你的努力,但是,我終於走上了正軌。看到我上面的編輯... – gordyr

+0

@gordyr,我更新了答案,只適用於具有'id = 1'作爲查詢字符串一個參數的URL。 – myanimal

+0

太棒了,我不能夠感謝你。您的答案不僅能夠完美地解決我的問題,而且還讓我更好地理解nginx重寫如何在此過程中工作。乾杯! – gordyr