我正在我的网站上为我的图像构建一个文件系统,我希望有一个公共图像的文件夹树和私有图像的私人文件夹树。我的系统已经使用以下.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
我如何完成它?
答案 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