2011-03-09 77 views
0

我試圖得到一個RewriteCond/RewriteRule對工作,這將導致404錯誤,除非我取消註釋RewriteCond,在這種情況下,一切都被重定向。Apache .htaccess mod_rewrite RewriteCond問題

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase /path/ 
RewriteCond /var/www/site/downloads/$1 -F 
RewriteRule ^(.+)$ getdownload.php [L] 
</IfModule> 

的想法是,如果該文件在下載目錄中的用戶發送到getdownload.php腳本,用於分配的下載,假設他們有權限。

有什麼想法爲什麼這會失敗?

回答

1
RewriteCond %{SCRIPT_FILENAME} -f 
RewriteRule path/downloads/(.*) path/downloads/getdownload.php? [L] 

仍顯示URL下載/ index.php,但提供/downloads/getdownload.php內容,並確保它是一個文件。 (注意:我的.htaccess文件位於我測試網站的頂層。)

如果您想將其放入/ downloads /,您可以從規則兩側刪除「path/downloads /」。

+0

這似乎與我所需要的相反 - 我需要該文件不存在,而是存在於下載目錄中,在這種情況下,腳本getdownload.php(不在下載中)被重寫。 – skeggse 2011-03-09 18:36:49

+0

如果我理解你是正確的,那麼你所需要做的就是從規則的最後部分刪除/下載/。那時Apache應該說,「訪問者正在請求一個文件(存在於)path/downloads /中,因此我將它們指向path/getdownload.php」。無論上面有沒有Cond,如果該文件不存在於/ downloads /中,您將得到一個404。通過添加Cond,只有在/ downloads /中存在真正的文件時纔會觸發規則 - 實質上可以更快地殺死頁面調用一個腳本。 – Dawson 2011-03-09 19:26:42

+0

'RewriteRule path/downloads /(.*)path/getdownload.php? [L]' – Dawson 2011-03-10 06:51:55