网站程序的URL伪装法、服务器端的收费插件法和ISAPI-REWRITE的规则过滤法等,考虑自身网站结构和钱包的困难问题,最终选择了后者,即现在流行用来做伪静态的ISAPI Rewrite书写规则来实现

经测试四种情况正常,即站内链接正常,白名单里的链接正常,盗链者链接屏蔽,搜索引擎链接正常。

详细如下;

一、完全屏蔽所有盗链来源的写法(如已有其它规则,则置于已有规则的上面)

RewriteCond Host: (.+)

RewriteCond Referer: (?!http://\1.*).*

RewriteRule .*\.(?:gif|jpg|jpeg|png|bmp) /block.gif [I,O,N]

RewriteCond Host: (.+)

RewriteCond Referer: (?!http://\1.*).*

RewriteRule .*\.(?:gif|jpg|jpeg|png|bmp) /block.gif [I,O,N]

第一行通过RewriteCond的HOST定义其下的规则所适用的请求主机范围。

第二行通过RewriteCond的Referer定义规则适用的请求来源地址,我们都知道任何通过互联网方式访问网站都会留下Referer的痕迹,就好像我们在IIS日志里看到的一样。这里的(?!http://\1.*).*意思就是判断所有通过http协义发来的请求,都要应用规则。

第三行通过RewriteRule定义防盗链文件的后缀,这里仅是图片后缀,需要的可以添加mp3,rar等其它所有后缀。后面的/block.gif表示如果遇上这些后缀的文件被盗链后的转向,这里转向/根目录的block.gif,可以是HTML等任何文件。如果只想某个文件夹下面的文件不被盗链,只需要加上路径就可以。例如不想images和pic目录下的文件被盗,但其它可以。就要改写成:

RewriteRule (/images/|/pic/).*\.(?:gif|jpg|jpeg|png|bmp) /block.gif [I,O,N]

这种情况主要是有些站长在别人友情链接里的图片地址是在自己这的。

最后面的[I,O,N],I表示不区分大小写,O表示对URL进行标准化,可能是用来处理Unicode编码的地址(例如包含中文的URL)以及QueryString的内容,N表示重新从站点请求文件而不是从本地缓存读取文件,目的是防止当用户访问了盗你链的网站后,再回到你的网站也出现盗链提示。

提示,由于此规则是通过Referer来获取带有http://字样的地址进行过滤,因此它无法防范其它协议的盗链,比如迅雷下载。但通过任何浏览器直接访问,只要是HTTP协义的,通杀。

以上关于RewriteCond和RewriteRule的作用仅是本人的土法理解,欢迎在这方面有专业研究的朋友在评论中指正,以免误导,另外如果遇到isapi-rewrite版本问题,只要保证后面的正则式写法正确就行。

二、排除性防盗链写法

RewriteCond Host: (.+)

RewriteCond Referer: (?!http://\1.*).*

RewriteCond Referer: (?!http://(.*)(\.baidu\.com|\.google\.com|\.google\.cn|\.g\.cn|\.gougou\.com|\.soso\.com|\.sogou\.com|\.youdao\.com|\.bing\.com|\.yahoo\.com|\.yahoo\.cn|\.eojoo\.com)).*

RewriteRule .*\.(?:gif|jpg|jpeg|png|bmp) /block.gif [I,O,N]

RewriteCond Host: (.+)

RewriteCond Referer: (?!http://\1.*).*

RewriteCond Referer: (?!http://(.*)(\.baidu\.com|\.google\.com|\.google\.cn|\.g\.cn|\.gougou\.com|\.soso\.com|\.sogou\.com|\.youdao\.com|\.bing\.com|\.yahoo\.com|\.yahoo\.cn|\.eojoo\.com)).*

RewriteRule .*\.(?:gif|jpg|jpeg|png|bmp) /block.gif [I,O,N]

第一行同上

第二行同上

第三行通过正则表达式对第二行中的请求协义地址进行过滤,这里按上面的写法,过滤了所有流行的搜索引擎,当然也包括你自己的站,或是你同台服务器其它的站。每个不同的域名写法是\.baidu\.com,多个有|号相隔。如果是IP则这样写100\.100\.100\.100

第四行同上

这样说明应该不难理解吧,直接拿去用,按着原有格式改。

规则中出现的正则表达式符号小解:

. 表示匹配除换行符以外的任意字符

+ 表示前面的字符可以出现一到任意多次

* 表示前面的字符可以出现零到任意多次

() 表示一个表达组,可以拿它和加减乘除法一起理解

?! 表示断言这个符号后面的字符如果出现则不再进行接下去的匹配

\ 表示转义符号,比如网址中的.是规则内置的运算符号,要把它通过\转义成字符。

| 表示或者,用于连接多种可能

服务器拦截图片格式文件,真正可用的IIS的ISAPI-Rewrite伪静态URL图片防盗链规则写法...相关推荐

  1. C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法

    C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法 参考文章: (1)C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文 ...

  2. 图片格式怎么转换?这两招帮你快速修改图片格式

    图片格式怎么转换?图片在我们平时的工作生活当中是非常常见的,一张小小的图片却并不简单,常见的格式就有jpg.png.webp.bmp.icon等,不同的情况下需要使用不同格式的图片,例如jpg是最广泛 ...

  3. 服务器返回文件错误,当检验用户名密码时出现远程服务器返回错误550文件不可用例如未找到文件无法访问文件怎样解决...

    楼主应对情况做出更加具体的描述,以待更好地解决此问题,下面是一般情况下解决此类问题的方法,您可以尝试看能不能解决: 症状 在执行下列任一基于服务器的任务时,可能收到"RPC server i ...

  4. python对webp图片格式文件进行jpg的转换

    目录 1.目前从网上下了很多图片是webp格式结尾的: 2.通过引入pil包实现转换: 1.目前从网上下了很多图片是webp格式结尾的: 在直接使用时可能某些软件不支持这种格式的使用,需要进行转换,通 ...

  5. python下载图片到文件夹_python实现解析markdown文档中的图片,并且保存到本地~

    背景 前阵子简书好像说是凉了,搞得我有点小慌,毕竟我的大部分博客都是放在简书上面的,虽然简书提供了打包导出功能,但是只能导出文字,图片的话还是存在简书服务器上面,再加上我一直想要重新做一个个人博客,于 ...

  6. java word导出图片格式_用java怎么将word文档转成图片格式

    展开全部 使用 java 操作 openoffice 实现格式转换 辛苦了几天. 不敢独享成果 首先,要安装 openoffice (废话- -) 创建JAVA项目的时候 需要323131333532 ...

  7. 服务器里没有wwwroot文件夹,完美解决IIS 服务器无法加载应用程序 '/LM/W3SVC/1/ROOT'。错误是 '没......

    现象: 浏览ASP页面提示   500内部错误 事件查看器中: [1]: 服务器无法加载应用程序 '/LM/W3SVC/1/ROOT'.错误是 '没有注册类别'. 有关此消息的详细信息,请访问 Mic ...

  8. nginx配置图片防盗链

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 30d;access_log off;valid_referers none blocked *. ...

  9. 如何将PDF文件批量转换成图片格式

    在我们的日常工作中文件转换是一件常见的日常工作,而PDF文件转换是每一个上班族必备的技能之一,比如讲PDF文件转换成图片格式.毫无疑问PDF格式给用户带来更好的阅读体验,PDF文件是一页一页的文件形式 ...

最新文章

  1. oracle双机切换 无法挂载,Linux下Oracle RAC一个节点宕机导致共享存储无法挂载的故障排除...
  2. 2017年全球光伏需求有望首次突破100吉瓦
  3. 深度稳定学习:因果学习的最新进展 | 清华大学团队 CVPR 研究
  4. python的翻译-python写的翻译代码
  5. 6.Spring Cloud Alibaba教程:Sentinel流量防卫兵的介绍与基本使用
  6. java 小数运算 少0.1_计算器是如何实现0.1的?
  7. spark 源码分析之十三 -- SerializerManager剖析
  8. vue 方法获取返回值_vue.js - vuex异步提交,怎么获取返回数据
  9. JavaBean为什么要实现Serializable接口
  10. qstring去掉特定字符_如何花式、批量且操作简单地处理字符?
  11. 从里面学到的关于过去的经验 后篇
  12. javaweb 图书管理系统完整代码_Java Web安全代码审计(一)
  13. 百度宣布成立量子计算研究所,段润尧加盟任所长
  14. git fatal: index file smaller than expected
  15. canvas绘图粒子扩散效果【原创】
  16. 68.vivado与modelsim的关联以及器件库编译
  17. Oracle密码过期问题处理方法
  18. 高斯核原理详解+生成高斯核的Python代码
  19. 后台事务自动跳转工作流节点
  20. Ubuntu安装Caffe过程和BUG以及解决方案(全网最全)

热门文章

  1. 实用流水记账本,将全部账目导出生成表格
  2. 【ShawnZhang】带你看蓝桥杯—— 算法提高 阮小二买彩票
  3. 【狼窝乀野狼】Parallel浅尝辄止
  4. 国内油价迎年内最小降幅:92号汽油下跌0.07元/升
  5. 秒杀系统架构设计,手把手教你画架构图!
  6. 青杉计划2022 | 巨杉数据库春招正式启动
  7. MFQPPDCS 大型嵌入式软件系统的测试分析和测试设计
  8. MeeGo系统领衔 诺基亚5款智能新机曝光
  9. 没有太空电梯的废铁镇——来一波未来风蒸汽朋克(第二辑)
  10. Jupyter Notebook中的Markdown单元格(1)段落-标题-分隔线