2012-02-28 30 views
1

我的網站,讓我們說我有一個名爲「下載」使用mod_rewrite重定向變量到一個PHP文件?

所以文件夾中文件的直接鏈接,文件將是www.testing.com/download/file.exe

我想扔像這樣的授權令牌,.../download/file.exe?auth = asdffg122 **,其中auth令牌是從時間到期的散列。到目前爲止,我已經寫在.htaccess文件:

RewriteEngine on 
RewriteRule \(.*)$.(exe)$ check.php?file=$1?auth=$2 [QSA] 

我想要的文件的名稱傳遞給變量$ 1,驗證令牌到$ 2個可變。有沒有辦法做到這一點?

+0

你所期望的htaccess文件裏將要產生的權威性的價值? – 2012-02-28 20:08:42

+0

不會在創建鏈接時生成它。我只想將變量傳遞給php文件。 – 2012-02-28 20:12:18

+0

或者真正的文件名可能是file.exe,然後下載鏈接將是file_dummy.exe?auth = ** hash ** ..然後只是傳遞文件名和哈希到php中,但鏈接看起來像它的鏈接到一個直接文件。 – 2012-02-28 20:13:26

回答

1

是這樣的?

RewriteEngine on 
RewriteCond %{QUERY_STRING} .*auth=(.*)\&*.*$ 
RewriteRule ^.*\/(.*\.exe)$ check.php?file=$1&auth=%n 

假設你添加AUTH =的GET請求 編輯:修改基於從$ @評論Orbling

+0

查詢字符串在進入'RewriteRule'之前被剝離,所以你不能像那樣匹配它。如果迫切需要匹配,可以在'RewriteCond'中使用'%{QUERY_STRING}'和在隨後的'RewriteRule'命令中使用'%n'替換(而不是'$ n')匹配組。在重寫之後,'[QSA]'標記會重新添加查詢字符串,並將其與您添加到規則目標上的任何內容相結合。 – Orbling 2012-02-28 20:35:11

+0

我不一定需要它匹配,我只需要它傳遞給php文件。 – 2012-02-28 20:38:01

1

你可能想什麼,還是應該寫的是:

RewriteRule ^(.*\.exe)$ check.php?file=$1 [QSA] 

領先\反斜槓應該是一個^開始錨,如果地方重寫規則到下載文件夾中。您也可以只有一個$結束主題標記(通常)。要聲明文件擴展名,請將其移到括號中。整個(.*\.exe)變成$1

當您使用[QSA]時,?auth=abc22自動附加爲&auth=abc22。因此,添加$2變得多餘。 (無論如何,你需要單獨的RewriteCond來匹配QUERY_STRING,它不是重寫路徑的一部分。)

另請參閱Serverfault: Everything You Ever Wanted to Know about Mod_Rewrite Rules but Were Afraid to Ask?以獲取更多示例。

+0

感謝您的回答,那麼您是說當(。* \。exe)傳遞給$ 1 .. file.exe?auth = abc22 = $ 1時? – 2012-02-28 20:19:42

+0

只有直到'?'問號變成'$ 1'的部分。查詢字符串不被RewriteRule看到。有關詳細信息,請參閱http://wiki.apache.org/httpd/Rewrite。 – mario 2012-02-28 20:23:31

+0

我將如何繼續爲查詢編寫重寫代碼?像 重寫(^。\?)$ ..然後傳遞?或沒有?抱歉提出了很多問題..:/ lol – 2012-02-28 20:31:23

相關問題