前一段时间网站因为被盗链,导致流量超标,后来就寻找网站防盗链的方法,发现使用.htaccess文件是一个不错的选择,虽然并不完美,但是差强人意吧,简单的功能还是能够实现的。
其实代码非常简单,我这里使用了两次,代码如下:
RewriteCond %{HTTP_REFERER} !^http://yangyq.net/.*$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png)$ /files/err.bmp [L,NC]
RewriteCond %{HTTP_REFERER} !^http://yangyq.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://yangyq.net$ [NC]
RewriteRule .*\.(mp3|rar|c)$ http://yangyq.net [L,NC]
这里解释一下:
HTTP_REFERER,这个是浏览器请求的数据包中的参数,具体含义请参考HTML协议。下面RewriteRule的内容就是需要防盗链的文件类型,一般来讲包括图片格式,mp3文件以及压缩包,这里因为我想把图片都显示为我预设的一张图片, 后面紧跟的内容/files/err.bmp就是你希望跳转的文件。整段话的意思就是,如果本站图片资源请求的HTTP_REFERER不是本站的地址(http://yangyq.net或者http://yangyq.net/.*)的话,则跳转到/files/err.bmp这个文件。
效果就是当别的网站引用本站的图片时,就会出现err.bmp这张照片,告诉浏览者这是被盗链的图片。
对于其他的文件,我让其跳转到http://yangyq.net这个页面。
对于图片,这里会出现一个问题,那就是如果你这样写:RewriteRule .*\.(jpg|jpeg|gif|png|bmp)/files/err.bmp [L,NC] ,那么当跳转到err.bmp的时候,检测到这个规则需要再次跳转到err.bmp,一直重复循环下去,在火狐下面提示您请求的内容循环重定向。网上有介绍说,把后面的 [L,NC]改成 [R,NC],我测试了一下,实际也是不行的,我不知道是不是我配置的问题,至少这个问题我没有解决。我选择的方法是这个err图片我找一种不常用的格式,比如我的网站除了这个bmp再也没有bmp文件了,那么规则里面我就不需要对bmp文件进行防盗链了。于是上面的代码变成了这样RewriteRule .*\.(jpg|jpeg|gif|png) /files/err.bmp [L,NC],这样不会出现循环重定向的问题。
以后可以尝试还有没有更好的办法。
请教了
如何让MP3可以在自己网页上在线播放但是又防盗链
我用您提供的代码好像实现不了
@wonsore 你说的这个问题我也是知道的,我现在没有想到特别好的办法,因为你的页面请求mp3文件的时候,也没有正确的HTTP_REFERER,所以这种方法可能无法实现你说的功能。
我再考虑一下,如果有答案我会联系你的,谢谢关注!
不过有点不如人意的地方,就是直接复制下来不能运行
这个叫做coolcode,是国人开发的,大名鼎鼎,你搜一下就知道了
对你这个显示代码插件比较感兴趣。