htaccess - 过滤公共和私人请求

时间:2014-02-19 18:54:17

标签: php apache .htaccess mod-rewrite filesystems

我正在我的网站上为我的图像构建一个文件系统,我希望有一个公共图像的文件夹树和私有图像的私人文件夹树。我的系统已经使用以下.htaccess规则为图像创建了小网址:

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

所以这个请求:

www.mysite.com/1234567

会去:

的htdocs / pictree /头/ 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

我如何完成它?

1 个答案:

答案 0 :(得分: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