перезапись модов и перенаправление изображений

#apache #mod-rewrite

#apache #перезапись модов

Вопрос:

У меня есть веб-сайт с большим количеством изображений. Допустим, эти изображения хранятся в папке «/data /images». Также у меня есть папка с изображениями с водяными знаками: «/ data / wimages». Имена файлов оригинальных изображений и изображений с водяными знаками совпадают, но не все изображения имеют свою копию с водяными знаками. Итак, я хочу перенаправить исходные изображения (без изменения их URL в браузере или исходном коде html), если присутствует копия с водяными знаками, и пройти через исходное изображение, если нет. Я пытаюсь решить эту проблему с помощью Apache mod_rewrite:

 RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f # Checking if file exists and is a regular file.
RewriteCond %{REQUEST_URI} ^.*/data/images/.*.(gif|jp?g|png)$ [NC] # Is file an image?
RewriteRule ^data/images/(.*.(gif|png|jp?g))$ /data/wimages/$1 [NC] # New watermaked image url. 
RewriteCond %{REQUEST_FILENAME} !-f # If watermarked image not exists ..
RewriteRule ^data/wimages/(.*.(gif|png|jp?g))$ /data/images/$1 [NC,L]
  

затем я восстанавливаю ранее измененный URL и получаю бесконечный цикл!

Есть идеи?

P.S. Извините за мой английский.

Ответ №1:

 RewriteEngine on

RewriteCond %{QUERY_STRING} !rewritten
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^.*/data/images/.*.(gif|jpe?g|png)$ [NC]
RewriteRule ^data/images/(.*.(gif|png|jpe?g))$ /data/wimages/$1?rewritten=1 [QSA,NC]

RewriteCond %{QUERY_STRING} !^rewritten=2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^data/wimages/(.*.(gif|png|jpe?g))$ /data/images/$1?rewritten=2 [QSA,NC,L]