2011-12-26 26 views
1

我有一個正則表達式,可以將文件夾「/ downloads」中的任何文件重定向到一個PHP腳本,然後將該文件提供給該文件(以及其他內容)。但是,我想在那裏有一些我可以查看的PHP文件,而不是讓他們下載(顯然也是一個安全問題)。但是,我對這個正則表達式不太瞭解。我期待NITO,但沒有得到它的權利:(正則表達式排除特定文件

<IfModule mod_rewrite.c> 
RewriteEngine on 

#Redirect any file coming in to the downloads manager 
RewriteRule ^(.+\.*) /downloads?file=$1 [R,L] 
</IfModule> 

我能找到到目前爲止可以工作的唯一事情是RewriteRule ^(.+\.php)$ - [L]。但是,這是行不通的。如果任何人都可以很快解釋這一點,或如果你能解釋爲什麼它不能自行下載,那將會是很好的!
另外,正如你可能已經想出了這個重定向到/ downloads文件夾的index.php。它不會下載/ index.php,但不是簡單的/下載。不需要的信息,讓它工作,但想知道:)
感謝您的任何答覆。

+0

在你的'RewriteRule',你的意思'。+ \。*'或'。+ \ .. *'?第一個查找以0或更多時間段結束的任何字符串,而第二個查找特定於其中某個句點的任何字符串(例如,擴展名)? – 2011-12-26 13:30:57

+0

您是在Apache的'httpd.conf'文件中發佈的重寫代碼,還是在'.htaccess'文件中?如果'.htaccess'中的文件是'/ downloads'目錄下的文件,或者它在根目錄下?請澄清你的問題。另外,'/ downloads'中的哪些文件要以不同的方式處理?就目前來看,這個問題有點太模糊,無法準確回答。 – ridgerunner 2011-12-26 17:14:23

+0

這是一個.htaccess,在/ downloads。 PHP文件不需要受到影響(不下載)。如果我以後可以添加其他文件類型或特定文件,那麼很好。對不起,不夠清楚! – 2011-12-26 17:54:17

回答

0

使用RewriteCond禁止匹配你不想:

RewriteCond %{REQUEST_URI} !\.php$ 
RewriteRule (.*) /downloads?file=$1 [R] 

(我刪除了L,因爲它沒有任何這裏使用)

+0

頂線效果很好。然而,當我剛剛訪問/下載/時,底線創建了一個無限循環。就像我知道的那樣,我的舊版本是爲了在某些格式爲'\ *。\ *'的情況下工作。文件名和擴展名。它似乎與'RewriteCond%{REQUEST_URI}!\。php $ RewriteRule ^(。+ \。*)/ downloads?file = $ 1 [R,L]'一起工作,除了訪問/ downloads /文件夾。它試圖下載該文件夾。 – 2011-12-26 16:49:02

+0

只需使用'RewriteRule(。*)/downloads.php?file=$1 [R]'來防止循環。 – Gerben 2011-12-29 21:36:38