2011-02-02 27 views
0

我試圖創建一個安全的下載web應用程序與以下情況。任何人都知道如何可以做到這一點:用於唯一URL的Apache內部重寫模塊?

1)用戶被給予一次性URL 一)這種一次性URL存儲在Oracle數據庫映射到實際的URL 2)當用戶訪問一次性URL: a)Apache模塊連接到數據庫以查看是否存在一次性URL b)如果存在,apache將內部重寫爲實際URL c)如果不存在,則404或任何類型的錯誤(404或其他)是足夠好的

2.a和2.b是我正在尋找答案。我不知道如何做到這一點,並確保重寫內部發生。

謝謝

回答

0

AFAIK這是不可能的只是通過Apache。你必須要做的是:

  • 配置Apache重定向到一個服務器腳本,這將使「神奇」的獨特環節發生
  • 服務器腳本檢查如果唯一提供的網址仍然有效,行爲按照:
    • 提供文件和無效(刪除或標記爲送達)獨特的URL行數據庫
    • 回覆狀態爲404或重定向到404頁,在其他情況下

有關如何使事情發生的確切細節取決於您在服務器上可用的腳本引擎以及您的首選項。它可以在各種引擎中完成,從PHP到CGI到.NET到ASP等等。

+0

沒錯,但服務器腳本意味着頭重定向或通過服務通過數據流,我試圖避免由於約束。 – 2011-02-07 18:33:59

0

這應該可以使用Apache的trunk版本中提供的新的dbd類型的RewriteMap功能。顯然,作爲服務器的當前開發分支,您需要小心隨着時間的推移發生的配置更改。

RewriteEngine On 
RewriteMap urlmapper "dbd:SELECT redirect_url from my_table WHERE some_key = %s" 
RewriteRule /one_time/(.+) ${urlmapper:$1|/404.html} 

當然,您將需要一些額外的邏輯來處理沒有結果返回的情況。

http://httpd.apache.org/docs/trunk/rewrite/rewritemap.html#dbd

+0

很明顯,在開發分支你需要小心句號。 – Leigh 2011-02-03 11:54:05

0

想通了這一點......你可以做到這一點使用XSEND(https://tn123.org/mod_xsendfile/)...設置一個PHP腳本來處理任何URI與文件下載,並否認了所有訪問實際的文件目錄,以便通過XSEND獲取文件強制它的唯一方法。