Правило перезаписи, запрещающее связывание изображений с другого сервера [дубликат]

Возможный дубликат:
Как предотвратить горячие ссылки («кража изображений» / «кража пропускной способности») ресурсов на моем сайте?

Я бы хотел запретить размещение ссылок на изображения на моем сервер. Это означает, что если кто-то пытается установить ссылку с другого сервера на изображение моего сервера, он должен видеть не связанное изображение, а альтернативное изображение (изображение с надписью: «Связывание изображений запрещено!»).
К сожалению, это вообще не работает: либо исходное изображение отображается на удаленном сервере, либо изображение с запрещенным кодом отображается даже на моем собственном сервере, хотя я никогда не вызываю свои изображения с полным 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;"/>

Так что здесь не так?

0
задан 13 April 2017 в 05:14
2 ответа

Я подозреваю, что 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]
0
ответ дан 23 November 2019 в 11:02

Если я понимаю ваши правила, вы делаете:

... Я бы сделал:

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]

Это короче, эффективнее и яснее.

Надеюсь, это поможет.

1
ответ дан 23 November 2019 в 11:02

Теги

Похожие вопросы