在Apache服务器的前提下利用.htaccess文件来防盗链的原理是通过检查图片或文件请求头信息中的Referer属性(也就是请求的来源),判断它是否属于你所规定的合法的请求来源,从而实现让合法来源能够获得请求的图片或文件、不合法的请求被转向到另一个指定的链接(通常是盗链提示的图片,并且尽量控制该文件大小从而降低流量损耗)。
- 具体的做法是在.htacess文件中添加类似以下几行的代码
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ [NC] RewriteCond %{HTTP_REFERER} !purplesecond.com [NC] RewriteCond %{HTTP_REFERER} !google.com [NC] RewriteCond %{HTTP_REFERER} !baidu.com [NC] RewriteRule .*.(jpg|gif|png|jpeg)$ http://www.oursmemory.com/favicon.ico [R,NC,L]
- 简单地逐条解释一下上面几行代码
1. 开启重写功能
RewriteEngine on
2. 下面这句代码是使当在浏览器地址栏中直接输入图片或文件的地址时,访问者能够获得请求的文件。一般来说,我们是允许这么做的,但如果你非要禁止访问者直接输入网址访问图片或文件,你可以不加这条,但这可能导致访问者在通过代理访问时即使在站内发出图片或文件请求时,也会发生无法请求的问题,具体情况我也不清楚,大家可以去查看相关资料。
RewriteCond %{HTTP_REFERER} !^$ [NC]
3. 这三条代码的作用是让三条中提及的网站在请求本站的图片或文件时,不会受到后述的重写设置,即这三个网站属于白名单。
RewriteCond %{HTTP_REFERER} !purplesecond.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
4. 这条表示对符合上述条件的HTTP_REFERER应用本条重写规则,让所有未在白名单之内的网站在访问本网站的jpg,gif,png,jpeg文件时,都会被返回http://www.oursmemory.com/favicon.ico 所代表的文件。
RewriteRule .*.(jpg|gif|png|jpeg)$ http://www.oursmemory.com/favicon.ico [R,NC,L]
5.补充说明一下:R,NC,L的含义
R:转向
NC:不区分大小写
L:本次转向到此结束,后续的转向不受先前判断语句的影响