2010-08-25 2 views
0

Я работаю над устаревшей кодовой базой с тремя различными папками изображений. Изображение может быть в любой из трех папок в довольно случайном порядке.htaccess бесконечное перенаправление

Сначала я попытался проверить наличие файла в PHP; однако изображения отображаются в тоннах мест, и я надеюсь, что я могу просто добиться того же самого с файлом htaccess. Однако до сих пор не повезло.

Вот что у меня до сих пор:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^Folder_1/(.*)$ Folder_2/$1 [L,NC] 
RewriteRule ^Folder_2/(.*)$ Folder_3/$1 [L,NC] 

То, что я хотел бы случиться для любого запроса изображения, которое не существует, проверьте другие две папки, в любом порядке, для его существование. Итак, если кто-то попросит Folder_3/image.png, он проверит Folder_1/image.png, затем Folder_2/image.png

Любые предложения по написанию файла htaccess?

ответ

0

Используйте флаг [N], чтобы начать переписывание сверху.

+0

Так как: [L, NC, N]? – thekevinscott

0

В случае, если вы не смогли заставить его работать на основе Ignacio's suggestion, я хотел бы предложить что-то вроде этого, что, хотя немного запутанным, кажется, работает:

RewriteEngine on 

# If the request points to a real resource, just end here 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -l 
RewriteRule^- [L] 

# Check the other two directories 
# First, figure out which directory we're currently in and capture the rest 
RewriteCond $1|Folder_1|Folder_2|Folder_3 ^([^\|]+)\|(.*?)\|?\1\|?(.*)$ 
# Now break them up into two folders 
RewriteCond %2|%3 ([^\|]+)\|([^\|]+) 
# Check the first alternate folder to see if it exists there 
RewriteCond %{DOCUMENT_ROOT}/%1/$2 -f [OR] 
# If not, make the second option move to the first back reference 
RewriteCond %2 ^(.*)$ 
# Check the second alternate folder to see if it exists there 
# (or check the first option again if it succeeded..we could condition 
# this out in that case, but I don't know if it's worth adding) 
RewriteCond %{DOCUMENT_ROOT}/%1/$2 -f 
# If so rewrite to the correct alternate folder 
RewriteRule ^([^/]+)/(.*)$ /%1/$2 
0

RewriteCond directive делает только принадлежат к следующему RewriteRule directive. Это означает, что Вы должны были бы поместить эти RewriteCond директивы перед каждым RewriteRule:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^Folder_1/(.+) Folder_2/$1 [L,NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^Folder_2/(.+) Folder_3/$1 [L,NC] 

Кстати: Ваше второе условие %{REQUEST_FILENAME} !-d, вероятно, бесполезно, поскольку это только тесты для существующего каталога.

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