htaccess бесконечное перенаправление - PullRequest
0 голосов
/ 25 августа 2010

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

Сначала я попытался проверить существование файла в 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?

Ответы [ 3 ]

0 голосов
/ 21 сентября 2010

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

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 голосов
/ 21 сентября 2010
Директива

A RewriteCond относится только к следующей директиве RewriteRule .Это означает, что вам нужно будет разместить эти директивы 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, вероятно, бесполезно, поскольку оно проверяет только существующий каталог.

0 голосов
/ 25 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...