IIS真正能用的ISAPI-Rewrite防盗链法则写法[服务器安全]
本文“IIS真正能用的ISAPI-Rewrite防盗链法则写法[服务器安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
本法则支持白名单解除式防盗链,搜索引擎友好不屏蔽,被盗链后的错误提醒转向,支持各种文件范例,经作者亲验真的能用,第一时间在itmop.com原创发表,请持续往下阅读.
近来小站碰到了盗链问题,至使网站的流量白费流失,于是被迫预备为服务器安装防盗链机制以解救本就不宽裕的带宽.通过G.CN和B.CN搜索后得出了几种差别的筹划,比方网站程序的URL假装法、服务器端的收费插件法和ISAPI-REWRITE的法则过滤法等,考虑自身网站构造和钱包的艰难问题,终究挑选了后者,即目前风行用来做伪静态的ISAPI Rewrite书写法则来实现我的防盗链“幻想”.
为什么说是幻想呢?首先表示惋惜,懒人我搜来了一大票经过无数次转载而来的文章,把现呈的代码利用后发现要末根本不起作用,要末就是效果达不到我想要的,几经周折后终于把这本来认为可以简单鉴戒照搬的防盗链给完成了,恨那些只会转载和伪原创的站长们,自己也不试试就拿来填充,害了多少人浪费了大把的时间.
经过恶补正则表达式相关教程并对前辈们留下的法则举行改正后,以下ISAPI Rewrite已经在我的服务器上正常运作.
经测试四种情形正常,即站内链接正常,白名单里的链接正常,盗链者链接屏蔽,搜索引擎链接正常.
具体以下;
1、完好屏蔽全部盗链根源的写法(如已有别的法则,则置于已有法则的上面)
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版本问题,只要保证背面的正则式写法精确就行.
2、解除性防盗链写法
RewriteCond Host:
(.+) RewriteCond Referer: (?!http://\1.*).* RewriteCond Referer: (?!http://(.*)(\.百度\.com|\.谷歌\.com|\.谷歌\.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] |
老板,来个小解:
第一行同上
第二行同上
第三行通过正则表达式对第二行中的恳求协义地址举行过滤,这里按上面的写法,过滤了全部风行的搜索引擎,当然也包含你自己的站,或是你同台服务器别的的站.每个差别的域名写法是\.百度\.com,多个有|号相隔.假如是IP则这样写100\.100\.100\.100
第四行同上
这样阐明应当不难理解吧,直接拿去用,按着原有格局改.
法则中呈现的正则表达式标记小解:
. 表示匹配除换行符以外的肆意字符
+ 表示前面的字符可以呈现一到肆意多次
* 表示前面的字符可以呈现零到肆意多次
() 表示一个表达组,可以拿它和加减乘除法一同理解
?! 表示断言这个标记背面的字符假如呈现则不再举行接下去的匹配
\ 表示转义标记,比方网址中的.是法则内置的运算标记,要把它通过\转义成字符.
| 表示大概,用于衔接多种大概
通过以上这“乱七八糟”的标记,竟然构成了如此强盛的法则,感慨!