Уявіть собі ситуацію, коли один добрий, хороший і приємний в усіх відношеннях чоловік розмістив на своєму сайті колекцію картинок — кадрів з якого-небудь популярного фільму. Картинки користуються великою популярністю, народ активно дивиться їх. Це, природно, виливається в непоганий вихідний трафік з сервера. Для прикладу — цей сайт породжує трафіку приблизно на 5-6 Гб в місяць, і це при майже повній відсутності картинок! Сайт, орієнтований на картинки (ну не треба мене звинувачувати в підтримці xxx сайтів…), здатний породжувати трафік сотнями Гб. в місяць. І за все це треба платити (наприклад, за 2.5 долара за 1 Гб).

І раптом цей чудовий, чудовий альтруїст зауважує, що трафік збільшився вдвічі, при тій же відвідуваності. Отже, треба платити в два рази більше! Чому? Виявляється, якийсь дуже нехороша людина теж зробив сайт з тими ж картинками. Але, оскільки такі картинки в мережі вже є, нехороший чоловік вирішив заодно не витрачати свій трафік і використовувати картинки з хоста хорошої людини. І правда, тег 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. От і все, на зекономлені гроші купите собі халви і насолоджуйтеся!