使用Apache的htaccess防止图片被盗链的解决方法


Posted in PHP onApril 27, 2013

方法一:
所需要的命令如下:

RewriteEngine on   RewriteCond %{ HTTP_REFERER } !^$  
 RewriteCond %{ HTTP_REFERER } !^http://(www.)?simue.com /.*$ [NC]  
 RewriteRule .(gif &line;jpg)$ - [F]

如果觉得让别人的页面开个天窗不好看,那可以用一张图片来代替:

查看代码

 RewriteEngine on   RewriteCond %{ HTTP_REFERER } !^$  
 RewriteCond %{ HTTP_REFERER } !^http://(www.)?simue.com/.*$ [NC]  
 RewriteRule .(gif &line;jpg)$ http://www.simue.com /替代图片文件名 [R,L] 
需要注意的是,如果通过FTP方式将创建好的.htaccess上传到服务器上,传输模式应为ASCII而非Binary。上传到服务器后,应将其属性通过 CHMOD修改为644 或“RW-R?R?”,这样,可以保证服务器能够使用同时无法通过浏览器修改,当然,.htaccess的可读属性也存在一定的风险:攻击者可通过它找出 您要保护的对象或认证文件位置——解决办法是将认证文件.htpasswd放到网站根目录之外,这样,便无法通过网络找到它了。

方法二:
查看代码01 RewriteEngine on   RewriteCond %{HTTP_REFERER} !^$ [NC]  
 RewriteCond %{HTTP_REFERER} !simue.com [NC]  
 RewriteCond %{HTTP_REFERER} !baidu.com [NC]  
 RewriteCond %{HTTP_REFERER} !google.com [NC]  
 RewriteRule .*\.(gif|jpg)$ http://www.simue.com /no.png [R,NC,L]

简单的解释一下上述语句:
1、RewriteCond %{HTTP_REFERER} !^$ [NC]

允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言,这是可选的,不过,建议这么设置,如果强迫必须具有“HTTP_REFERER”才能访问,可能会带来某些问题,比如说在用户通过代理服务器访问时。

2、RewriteCond %{HTTP_REFERER} !simue.com [NC]

设置允许访问的HTTP来源,包括我们的网站 自身、Google、Baidu等。

3、RewriteRule .*\.(gif|jpg|png)$ http://www.simue.com/no.png [R,NC,L]

定义被盗链时替代的图片,让所有盗链 jpg、gif、png 等文件的网页,显示根目录下的 no.png 文件。注意:替换显示的图片不要放在设置防盗链的目录中,并且该图片文件体积越小越好。当然你也可以不设置替换图片,而是使用下面的语句即可:

RewriteRule .*\.(gif|jpg|png)$ - [F]

4、说明一下其中的R、NC 和 L

R 就是转向的意思
NC 指的是不区分大小写
L 的作用是指明本次转向到此结束,后续的转向不受先前判断语句的影响

5、防止盗链的文件类型

上例中是 gif、jpg、png,而根据需要,可更改或添加其他文件类型,如rar、swf等,不同文件扩展名间使用“|”分割。

PHP 相关文章推荐
PHP 七大优势分析
Jun 23 PHP
ThinkPHP中ajax使用实例教程
Aug 22 PHP
php获取数组元素中头一个数组元素值的实现方法
Dec 20 PHP
php中final关键字用法分析
Dec 07 PHP
利用PHP判断文件是否为图片的方法总结
Jan 06 PHP
PHP递归删除多维数组中的某个值
Apr 17 PHP
PHP小白必须要知道的php基础知识(超实用)
Oct 10 PHP
PHP-X系列教程之内置函数的使用示例
Oct 16 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
PHP7.3.10编译安装教程
Oct 08 PHP
php 模拟get_headers函数的代码示例
Apr 27 #PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 #PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 #PHP
php笔记之:php数组相关函数的使用
Apr 26 #PHP
php笔记之:有规律大文件的读取与写入的分析
Apr 26 #PHP
php笔记之:文章中图片处理的使用
Apr 26 #PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 #PHP
You might like
laravel实现简单用户权限的示例代码
2019/05/28 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
javascript XML数据显示为HTML一例
2008/12/23 Javascript
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
详解Python字符串对象的实现
2015/12/24 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
美国折扣网站:jClub
2017/08/07 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
机电专业毕业生推荐信
2013/11/10 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
中学生自我评价2015
2015/03/03 职场文书
公司员工手册范本
2015/05/14 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS