2014-02-19 2 views
0

Я создаю файловую систему для своих изображений на своем веб-сайте, и я хотел бы иметь дерево папок для общедоступных изображений и дерево частных папок для личных изображений. Моя система уже создает крошечные URLs для изображений с использованием следующих правил: .htaccesshtaccess - фильтровать общедоступные и частные запросы

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/head/1/23/45/12345657.png

Я хотел бы изменить структуру папок, чтобы включить общедоступные и частные папки:

HTDOCS/pictree/государственные/1/23/45/12345657.png

HTDOCS/pictree/частный/1/23/45/12345657.png

и если поступает запрос от адреса внутрибрюшинно в нашей локальной сети .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

Смежные вопросы