2009-04-20 33 views
0

您好,我正在嘗試將所有鏈接重定向到我網站中的任何pdf文件,並將其中的表單用於收集用戶信息,然後才能繼續下載/查看pdf。在下載之前將文件重定向到簡單表格

我想重定向在網站* .pdf文件到request.php?文件= name_of_pdf_being_redirected

哪裏request.php是頁面上的形式要求前的幾個細節訴訟。

該網站中的所有pdf都保存在/ pdf文件夾中。

任何想法?

編輯:抱歉,我在服務器上使用Apache。

好的,我乘車路線: 我現在的工作使用:?

RewriteEngine敘述上 重寫規則^ PDF /(.+ PDF)$ request.php文件=/$ 1 [R]

但現在當它進入下載頁面,當我想讓人真正下載文件時,我的新規則是將下載鏈接吐回到表單中:-哈哈,所以無論如何都要讓它下載文件表單已經提交,你在download.php?

+0

試圖用的RewriteCond以配合您的重寫規則。你可能能夠通過php來操作你可以在RewriteCond中使用的變量。 – 2009-04-20 04:39:35

回答

0

你可以試試這個:

  • 移動文件到文件夾「外」 Web根,這樣沒有人可以直通瀏覽器訪問它
  • 使用會話來檢測一個人是否已完成形式與否
  • 使用php供電的文件下載腳本。在其naivest形式,它可能是這樣的:
 
    if (isset($_SESSION[ 'OK_TO_DOWNLOAD' ]) == false) 
    { 
     header("Location: must_fill_this_first.php"); 
     exit(0); 
    } 

    header("Content-type: application/pdf"); 
    // double check the above, google it as i am not sure 

    echo file_get_contents('some_directory_inaccessible_thru_www/' . $_GET[ 'pdf_name' ]); 
    // ideally a binary-safe function needs to be used above 

這是一個久經考驗的技術,我在網站上使用。代碼示例是大綱草案,需要進一步細化。

1

想法?您可以先告訴我們您正在使用哪個網絡/應用程序服務器,這可能會有所幫助:-)

在Apache中,您應該能夠使用RewriteRule將請求轉換爲不同的表單。例如,打開/pub/docs/x.pdfrequest.php?file=/pub/docs/x.pdf可以用像做:從內存

RewriteRule ^/pdf/(.*)\.pdf/ request.php?file=/$1.pdf 

請記住,這是(六年來我感動Apache和還算乾淨:-),格式可能會略有不同。

更新:

現在你已經得到了排序,這裏有一對夫婦爲你的下一個問題的選項。

1 /重命名PDF以使其具有不同的擴展名,以便它們不會被重寫規則捕獲。應該將它們配置爲向客戶端推出相同的MIME類型,以便在客戶端選擇查看器時打開它們。

2 /下載也作爲腳本的一部分,而不是直接訪問PDF。由於表單提交是一個HTTP請求,因此您應該能夠立即用PDF內容回答它,而不是將它們重新指向再次到下載頁面。

那第二個選擇是我的選擇,因爲它:

  • 停止人搞清楚他們可以通過請求xx.pdfx而不是xx.pdf得到的PDF文件。
  • 使人們更快地獲得PDF(他們不必再次單擊該鏈接)。
+0

試過這個,沒有工作:-( 但是這使我更接近我想要的東西,它重定向但request.php頁面上的所有圖像現在被破壞,因爲它已經將路徑從/圖片到/ pdf /圖片 RewriteEngine on RewriteRule^pdf /(。+ \。pdf)$ request.php?file =/$ 1 [L] – dviero 2009-04-20 03:45:42

+0

原始URL是什麼? 「圖像」位與重寫。 – paxdiablo 2009-04-20 04:00:43

+0

我現在正在工作,但有一個新問題,請閱讀上面。感謝您的幫助 – dviero 2009-04-20 04:19:55

0

請注意,我的答案是關於.NET網站,但我確定PHP中某處存在相同的構造。

我會有一個HTTP模塊的路徑* .pdf,只是做一個Response.Redirect的request.php?...等(在我的情況request.aspx)然後在事件處理程序的按鈕單擊在那個頁面上,當你知道要顯示哪個pdf並且他們被授權時,簡單地做一個Response.ContentType = [MIME類型的pdf],然後是Response.WriteFile(pdfFile),最後是Response.End()。

還有其他一些東西可以讓它更好,比如文件大小等等。但是在最小的情況下,這是可行的。如果你想在C#中使用它的代碼,我可以在大約3分鐘內想出一些東西,但是在PHP中我很迷茫。我會開始尋找HTTPModules以及如何使用PHP編寫它們。

谷歌搜索「PHP HTTPModule」導致:Equivalent of ASP.NET HttpModules in PHP所以,我可能有點不對,但希望這是一個起點。

0

如果您使用的是Apache Web服務器,請使用.htaccess文件。你需要做出一定的,你必須啓用了mod_rewrite,但一旦你做,你可以使用這兩個簡單的線條重寫所有文件:

RewriteEngine敘述在 重寫規則^ .PDF $ /rewrite.php [NC,L]

如果您使用IIS,則可以使用ISAPI_Rewrite完成類似的操作。

您的其他選擇是將您的PDF放置在不可公開訪問的目錄內,然後對PDF資源提出的任何請求都會返回訪問被拒絕錯誤,並且只能通過相應的下載腳本訪問這些文件。

0
if($user==authenticated){ 
//set pdf headers 
echo file_get_contents('actual.pdf'); 

沒有國防部重新寫,隱藏實際源是什麼,我通常做的 - 希望這有助於