Возможный дубликат:
Как предотвратить горячие ссылки («кража изображений» / «кража пропускной способности») ресурсов на моем сайте?
Я бы хотел запретить размещение ссылок на изображения на моем сервер. Это означает, что если кто-то пытается установить ссылку с другого сервера на изображение моего сервера, он должен видеть не связанное изображение, а альтернативное изображение (изображение с надписью: «Связывание изображений запрещено!»).
К сожалению, это вообще не работает: либо исходное изображение отображается на удаленном сервере, либо изображение с запрещенным кодом отображается даже на моем собственном сервере, хотя я никогда не вызываю свои изображения с полным URL :
Options -Indexes
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.my-domain.net/en/pictures/drawings/.*$ [NC]
RewriteRule .*\.(png|PNG)$ http://www.my-domain.net/pics/linkingpicsforbitten.png [R]
Если я так сделаю, я всегда получаю изображение linkingpicsforbitten.png, даже на моем собственном сервере, хотя я вызываю свои изображения следующим образом:
<img class="pictures" src="drawings/myoriginalpic.png" alt="original pic" style="width:640px; height:466px;"/>
Так что здесь не так?
Я подозреваю, что Referer
не совпадает, поэтому вам следует записывать действия перезаписи с помощью RewriteLog
или использовать Firebug для проверки HTTP-ссылки.
Попробуйте что-то вроде этого:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?my-domain\.net/.*$ [NC]
RewriteRule .*\.(gif|jpe?g|png)$ http://www.my-domain.net/pics/linkingpicsforbitten.png [R,NC,L]
Если я понимаю ваши правила, вы делаете:
... Я бы сделал:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !en/pictures/drawings/ [NC]
RewriteRule .*\.(png|PNG)$ http://www.my-domain.net/pics/linkingpicsforbitten.png [R,L]
NB: второе правило перезаписи просто означает, что «если референт не содержит » en / pictures / рисунки /
, этого должно быть достаточно для вас и которое все еще может работать, если однажды вы используете https
.
Не забудьте «L»
в RewriteRule, чтобы больше не двигаться.
Если вам действительно не нужно делать перенаправление, вы можете вместо этого просто сделать это RewriteRule:
RewriteRule .*\.(png|PNG)$ /pics/linkingpicsforbitten.png [L]
Потому что то, что вы делаете, является перенаправлением. А редирект означает новый обмен. С предыдущим правилом у вас этого не будет. Не будет лишнего (и бесполезного) обмена между клиентом (который получит перенаправление, поэтому повторно запросите новое изображение) и сервером (который получит еще один запрос на переписанное изображение («запрещенное изображение»). .
Подводя итог:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !en/pictures/drawings/ [NC]
RewriteRule .*\.(png|PNG)$ /pics/linkingpicsforbitten.png [L]
Это короче, эффективнее и яснее.
Надеюсь, это поможет.