萬盛學電腦網

 萬盛學電腦網 >> 服務器故障 >> IIS中采用ISAPI-Rewrite防盜鏈方法

IIS中采用ISAPI-Rewrite防盜鏈方法

本文主要介紹IIS中采用ISAPI-Rewrite防盜鏈方法,對於apache方法類似,只是寫的規則不相同而已!如下文:

本規則支持白名單排除式防盜鏈,搜索引擎友好(不屏蔽),被盜鏈後的錯誤提示轉向,支持各種文件類型,經作者親驗真的能用,第一時間在itmop.com原創發表,請繼續往下閱讀。

近來小站遇到了盜鏈問題,至使網站的流量枉費流失,於是被迫准備為服務器安裝防盜鏈機制以挽救本就不寬裕的帶寬。通過G.CN和B.CN搜索後得出了幾種不同的方案,例如網站程序的URL偽裝法、服務器端的收費插件法和ISAPI-REWRITE的規則過濾法等,考慮自身網站結構和錢包的困難問題,最終選擇了後者,即現在流行用來做偽靜態的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定義規則適用的請求來源地址,我們都知道任何通過互聯網方式訪問網站都會留下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]

來個小解:

第一行同上

第二行同上

第三行通過正則表達式對第二行中的請求協義地址進行過濾,這裡(電腦自動關機)按上面的寫法,過濾了所有流行的搜索引擎,當然也包括你自己的站,或是你同台服務器其它的站。每個不同的域名寫法是\.baidu\.com,多個有|號相隔。如果是IP則這樣寫100\.100\.100\.100

第四行同上

這樣說明應該不難理解吧,直接拿去用,按著原有格式改。

規則中出現的正則表達式符號小解:

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

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

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

() 表示一個表達組,可以拿它和加減乘除法一起理解

? 表示斷言這個符號後面的字符如果出現則不再進行接下去的匹配

\ 表示轉義符號,比如網址中的.是規則內置的運算符號,要把它通過\轉義成字符。

| 表示或者,用於連接多種可能

通過以上這“亂七八糟”的符號,竟然組成了如此強http://.大的規則,感歎!


 

IIS中采用ISAPI-Rewrite防盜鏈方法
copyright © 萬盛學電腦網 all rights reserved