2014-02-19 134 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