可能重复:
如何防止我的网站上的资源热链接(“图像盗窃”/“带宽盗窃”)?
我想在我的服务器上链接图像链接。 这意味着,如果有人试图从另一台服务器链接到我的服务器的图像,他不应该看到链接的图像,而是一个替代的图像(一个图像写着:“图像链接是forbitten!”)。
不幸的是,它根本不起作用:原始图像显示在远程服务器上,或者在我自己的服务器上甚至会显示出这个图像,尽pipe我从来没有用完整的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不匹配,所以你应该使用RewriteLoglogging重写动作,或使用FirebugvalidationHTTP referer。
尝试这样的事情:
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]
注意:第二个重写规则仅仅意味着“如果引用者不包含"en/pictures/drawings/" ,这对你来说应该是足够的,而且如果你使用https一天仍然可以工作。
不要忘记RewriteRule中的"L" ,停止继续。 除非你真的需要redirect,否则你可以直接使用RewriteRule:
RewriteRule .*\.(png|PNG)$ /pics/linkingpicsforbitten.png [L]
因为你所做的是redirect。 redirect意味着新的交换。 用以前的规则,你不会有这个。 客户端(这将得到一个redirect,所以重新要求新的图片)和服务器(这将获得另一个请求重写的图片(“禁止的图片”)之间将不会有额外的(和无用的)交换) 。
总结:
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !en/pictures/drawings/ [NC] RewriteRule .*\.(png|PNG)$ /pics/linkingpicsforbitten.png [L]
这是更短,更高效,更清晰。
希望这可以帮助。