2013-10-30 19 views
0

我需要通過密碼保護服務器上的所有pdf文件。到PDF的典型路徑是/images/a/a2/some.pdf現有文件的Apache重寫規則不起作用

在httpd.conf我重寫代碼是:加

RewriteEngine On 
Options FollowSymLinks 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^images/([^/]*)/([^/]*)/([^/]*)^.pdf$ /download.php?file=$3& [L] 
RewriteRule images/a/a2/VB-VB-41-445%29_Small.pdf$ /download.php?file=ok [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ /index.php/$1 [L,QSA] 

5日線檢查是否存在一些問題,在常規表達。

不幸的是,重定向不起作用。如果pdf存在,它開始立即加載。 但是,如果路徑不存在,它的工作原理!我需要相反的結果。代碼有什麼問題,或者mod_rewrite有一些配置設置?

P.S.我注意到一個可能的答案:如果我在重寫規則中用「asdf」替換「images」並嘗試不存在的路徑,它會重定向到download.php。但是,如果我嘗試與「圖像」不存在的路徑,它會返回404錯誤。 Asdf在服務器上不存在,但圖像 - 是一個真正的文件夾。

RewriteRule /images/asd.pdf /download.php?file=ok [L,QSA] - doesn't work, folder exists, file asd.pdf doesn't exist 
RewriteRule /asdf/asd.pdf /download.php?file=ok [L,QSA] - works, redirects correctly to download.pdf, path doesn't exists (neither folder nor file) 
RewriteRule images/a/a2/VB.pdf$ /download.php?file=ok [L] - doesn't work, redirect doesn't happen, instead an existing pdf file starts to download. 

P.P.S.一段時間後,我發現裏面/圖像/文件夾中有與此文字.htaccess文件:

# Protect against bug 28235 
<IfModule rewrite_module> 
RewriteEngine On 
RewriteCond %{QUERY_STRING} \.[^\\/:*?\x22<>|%]+(#|\?|$) [nocase] 
RewriteRule . - [forbidden] 
</IfModule> 
<IfModule expires_module> 
    ExpiresActive On 
    ExpiresDefault "access plus 1 month" 
</IfModule> 

也許,這是改寫問題的原因。

P.P.P.S.

的問題已經解決,在文件夾/圖像中的一個文件寫的.htaccess重寫規則/:

# Protect against bug 28235 
<IfModule rewrite_module> 
RewriteEngine On 
RewriteCond %{QUERY_STRING} \.[^\\/:*?\x22<>|%]+(#|\?|$) [nocase] 
RewriteRule . - [forbidden] 
RewriteRule ^[^\/]+/[^\/]+/(.*)\.pdf$ ../download.php?file=$1& [L] 
</IfModule> 
<IfModule expires_module> 
    ExpiresActive On 
    ExpiresDefault "access plus 1 month" 
</IfModule> 

回答

1

的PDF開始下載,如果存在因的RewriteCond%{} REQUEST_FILENAME路徑-f指示。這告訴apache該文件存在並且不繼續執行以下規則。如果你刪除這行,mod_rewrite將總是遵循規則,不管文件是否存在。

+0

爲了獲得想要的結果,還添加了此行。重寫沒有或沒有工作。我剛剛刪除了RewriteCond%{REQUEST_FILENAME} -f並重新啓動了httpd服務。可悲的是,沒有任何改變。但是謝謝你的幫助! – karagota

+0

我檢查了你的規則,並認爲問題是與規則本身。試試這樣:RewriteRule^images/[^ \ /] +/[^ \ /] + /(。*)\。pdf $ /download.php?file=$1& [L] – lomantpa

+0

再次感謝。我檢查了你的建議,但沒有任何改變。我認爲,問題在於這個文件夾,圖像,爲此,重寫規則不起作用。因爲他們工作的不存在的文件夾。 – karagota