2014-02-19 181 views
0

我正在我的網站上爲我的圖像構建一個文件系統,我想爲公共圖像創建一個文件夾樹,併爲私人圖像創建一個私有文件夾樹。htaccess - 過濾公共和私人請求

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(.)(..)(..)(.*)$ ./pictree/head/$1/$2/$3/$1$2$3$4.png 

所以這個請求:

www.mysite.com/1234567

會去:

我的系統已經使用下面的.htaccess規則創建圖像的URL微小htdocs/pictree/head/1/23/45/12345657.png

我想修改文件夾結構以包含公共和私人文件夾:

的htdocs/pictree /公共/ 1/23/45/12345657.png

的htdocs/pictree /私人/ 1/23/45/12345657.png

並且如果請求來自一個IP地址在我們的本地網絡上,.htaccess會嘗試訪問專用文件樹中的文件,然後訪問公用文件樹。

所有其他請求只會訪問公共樹。

我猜新規則會喜歡這樣:

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{REMOTE_ADDR} ^###\.###\.## 
RewriteRule ^(.)(..)(..)(.*)$ ./pictree/private/$1/$2/$3/$1$2$3$4.png 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(.)(..)(..)(.*)$ ./pictree/public/$1/$2/$3/$1$2$3$4.png 

如何完成它呢?

+0

你已經有這個規則,有什麼不工作? – anubhava

回答

1

您應該使用N標誌重新運行重寫過程後匹配第一重寫規則:

#check private image 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{REMOTE_ADDR} ^###\.###\.## 
RewriteRule ^(.)(..)(..)(.*)$ ./pictree/private/$1/$2/$3/$1$2$3$4.png [N] 

#if private image not exist and we are requesting from internal network try public image 
#these rewrite rules are dedicated for sub-request 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{REMOTE_ADDR} ^###\.###\.## 
RewriteRule ^pictree/private/(.*)$ ./pictree/public/$1 

#in other cases get public image 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(.)(..)(..)(.*)$ ./pictree/public/$1/$2/$3/$1$2$3$4.png 
+0

謝謝,我以前從未使用[N]。問題很簡單,「./pictree/public/$1.png」是否需要「.png」? – Hoytman

+0

不 - 我的錯誤,應該是:./pictree/public/$1 – ziollek