И вдруг этот чудесный, замечательный альтруист замечает,
что трафик увеличился вдвое, при той же посещаемости.
Следовательно, платить надо в два раза больше! Почему?
Оказывается, какой-то крайне нехороший человек тоже сделал
сайт с теми же картинками. Но, поскольку такие картинки в
сети уже есть, нехороший человек решил заодно не тратить
свой трафик и использовать картинки с хоста хорошего
человека. И правда, тег img вовсе не запрещает использование
картинок с других хостов, знай пиши полный путь. И радуется
нехороший человек! Напакостил и счастлив.
Что же делать хорошему человеку? Закрывать сайт? Нет!
Великий защитник человечества - .htaccess - приходит на
помощь! Можно, оказывается, сделать так, чтобы картинки
можно было использовать только тому хосту, на котором они
находятся. И сделать это можно даже несколькими способами -
либо через функции apache, либо через mod_rewrite (модуль
apache, занимающийся перенаправлением на другие страницы).
Сначала посмотрим, как это можно сделать через
mod_rewrite. Для этого надо определить, откуда пришел
посетитель - если со своих страниц, то пустить его к
картинке. Иначе - послать далеко и надолго, а лучше всего на
спонсора :) Делается это через переменную http_referer. Вот
это надо приписать в .htaccess:
authuserfile /dev/null
authgroupfile /dev/null
rewriteengine on
rewritecond %{http_referer} !^http://www.webhowto.ru/
rewritecond %{http_referer} !^http://webhowto.ru/
rewritecond %{http_referer} !>http://www.webhowto.ru:80 [nc]
rewritecond %{http_referer} !>http://webhowto.ru:80 [nc]
rewriterule /* http://www.yoursponsor.com/click.cgi [r,l]
А теперь представьте себе, как работает mod_rewrite. Вся
проблема в том, что обработка запроса сервером происходит в
несколько этапов. Вкратце: сначала apache обрабатывает url,
а затем ставит им в соответствие файлы. Беда в том, что
обработка .htaccess происходит уже после обработки url,
поэтому чтобы обработать инструкции mod_rewrite корректно,
apache делает два раза одно и то же. Естественно, это сильно
тормозит сервер.
Есть более удобное решение. В httpd.conf в секцию,
относящуюся к папке, либо в .htaccess можно добавить
инструкции серверу не отдавать картинки незнакомым клиентам.
Это делается так:
setenvifnocase referer "^http://www.webhowto.ru"
local_ref=1
order allow,deny
allow from env=local_ref
Ура! Работает! В смысле, не работает! :)
Остается добавить, что вы вполне можете точно так же
сделать защиту не только для jpg и gif, но и для любых
других файлов, см. документацию по apache на предмет
синтаксиса бокса filesmatch. Вот и все, на сэкономленные
деньги купите себе халвы и наслаждайтесь
Автор статьи: Михаил Соловьёв
Сайт:webhowto.ru