"Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему"
Feb 142013
 

Сегодня расскажу как защитить ваш контент от скачивания ну и заодно разгрузить немного свой сервер сэкономив траффик.

Итак, имеем сервер, на котором установлен Apache2 и у него подключен модуль mod_rewrite (скорее всего подключен – у Вас ведь уже есть ЧПУ?) . Стоит задача защитить картинки от прямого скачивания, но при этом позволить поисковикам индексировать наши картинки + разрешить использование картинок на своих блогах на других блог-платформах.

Приступим!

В не легком деле защиты нам поможет файл .htaccess, расположенный в коневой директории вашего сайта. Apache2 читает этот файл при каждом обращении к сайту и выполняет все инструкции из него – добавим ему немного работы 🙂

Пусть наш сайт называется www.mysyte.com

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ http://www.mysyte.com[L]

Этот код будет перекидывать всех пытающихся просмотреть ваши картинки напрямую на главную страницу сайт. В принципе вместо http://www.mysyte.com можно написать какую-то картинку или вообще выдавать 403 ошибку – выбор за вами. Пример с выдачей ошибки ():

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$  - [NC,F,L]

Теперь добавим в условия поисковых ботов:

 RewriteEngine On
 RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
 RewriteCond %{HTTP_REFERER} !^$
 RewriteCond %{HTTP_USER_AGENT} !Googlebot [NC]
 RewriteCond %{HTTP_USER_AGENT} !Googlebot-Image [NC]
 RewriteCond %{HTTP_USER_AGENT} !Mediapartners-Google [NC]
 RewriteCond ${HTTP_USER_AGENT} !Mediapartners [NC]
 RewriteCond %{HTTP_USER_AGENT} !Googlebot-Mobile [NC]
 RewriteCond %{HTTP_USER_AGENT} !Googlebot-Video [NC]
 RewriteCond ${HTTP_USER_AGENT} !Googlebot-News [NC]
 RewriteCond %{HTTP_USER_AGENT} !msnbot [NC]
 RewriteCond ${HTTP_USER_AGENT} !slurp [NC]
 RewriteCond %{HTTP_USER_AGENT} !Bingbot [NC]
 RewriteCond %{HTTP_USER_AGENT} !YandexBot[NC]
 RewriteCond %{HTTP_USER_AGENT} !YandexImages[NC]
 RewriteCond %{HTTP_USER_AGENT} !YandexImages[NC]
 RewriteCond %{HTTP_USER_AGENT} !YandexVideo[NC]
 RewriteCond %{HTTP_USER_AGENT} !YandexMedia[NC]
 RewriteCond %{HTTP_USER_AGENT} !YandexBlogs[NC]
 RewriteCond %{HTTP_USER_AGENT} !YandexCatalog[NC]
 RewriteCond %{HTTP_USER_AGENT} !YandexNews[NC]
 RewriteRule .*\.(jpe?g|gif|bmp|png)$  - [NC,F,L]

В следующем посте я расскажу как сделать аналогичную защиту на связке Nginx+Apache2

Поделиться в соц.сетях

  5 Responses to “Защита картинок от прямого скачивания (hotlinking) с помощью htaccess”

  1. У меня это вопрос отпал после того как я перешел на другой хостинг.
    Намучавшись с отечественными остановился на зарубежном.
    Так вот там есть такая полезная фича защита от стыривания картинок и файлов.
    (HotLink Protection)
    http://secure.hostgator.com/~affiliat/cgi-bin/affiliates/clickthru.cgi?id=McDuck
    Очень полезная штука в наше время

    • Это все делается точно также через .htaccess ))) просто там они его генерят для Вас

  2. А почему некоторые считают, что прописывать первую строчку защиты нужно так: RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?ваш_сайт.ru.*$ [NC] или RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?ваш_сайт.ru [NC].

    • Ну это проверка что картинку выводите вы со своего стайта {HTTP_REFERER} – это откуда пришли за картинкой. !^http(s)?://(www.)?ваш_сайт.ru. проверка на то, что это НЕ ваш стай и запрет на доступ.
      Если прописать так, как вы написали, то даже поисковики не увидят ничего на вашем сайте.

  3. Звучит устрашающе, а на деле выглядит еще страшнее, но в конечном итоге задачу запрета Hotlink в nginx мне решить удалось. Естественно, что решение уже имелось главной проблемой было воплотить его в жизнь, ибо на сайтах сисадминов написано все настолько кратко и сжато, что у меня просто не хватало духу ринуться в пучину и начать во всем этом досконально разбираться. A как можно сделать, чтобы картинки с моего сайта на чужом сайте показывались с водяный знаком? Есть сайты, которые содержат картинки без вод. знака, но в поиске картинок Google они все с водяным знаком.Как можно такое реализовать?

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)