


IIS真正能用的ISAPI-Rewrite防盜鏈規(guī)則寫法
近來小站遇到了盜鏈問題,至使網(wǎng)站的流量枉費流失,于是被迫準備為服務(wù)器安裝防盜鏈機制以挽救本就不寬裕的帶寬。通過G.CN和B.CN搜索后得出了幾種不同的方案,例如網(wǎng)站程序的URL偽裝法、服務(wù)器端的收費插件法和ISAPI-REWRITE的規(guī)則過濾法等,考慮自身網(wǎng)站結(jié)構(gòu)和錢包的困難問題,最終選擇了后者,即現(xiàn)在流行用來做偽靜態(tài)的ISAPI Rewrite書寫規(guī)則來實現(xiàn)我的防盜鏈“夢想”。
為什么說是夢想呢?首先表示惋惜,懶人我搜來了一大票經(jīng)過無數(shù)次轉(zhuǎn)載而來的文章,把現(xiàn)呈的代碼應(yīng)用后發(fā)現(xiàn)要么根本不起作用,要么就是效果達不到我想要的,幾經(jīng)周折后終于把這原本認為可以輕易借鑒照搬的防盜鏈給完成了,恨那些只會轉(zhuǎn)載和偽原創(chuàng)的站長們,自己也不試試就拿來填充,害了多少人浪費了大把的時間。
經(jīng)過惡補正則表達式相關(guān)教程并對前輩們留下的規(guī)則進行修改后,以下ISAPI Rewrite已經(jīng)在我的服務(wù)器上正常運作。
經(jīng)測試四種情況正常,即站內(nèi)鏈接正常,白名單里的鏈接正常,盜鏈者鏈接屏蔽,搜索引擎鏈接正常。
詳細如下;
一、完全屏蔽所有盜鏈來源的寫法(如已有其它規(guī)則,則置于已有規(guī)則的上面)
RewriteCond Host: (.+)
RewriteCond Referer: (?!http://\1.*).*
RewriteRule .*\.(?:gif|jpg|jpeg|png|bmp) /block.gif [I,O,N]
老板,來個小解:
第一行通過RewriteCond的HOST定義其下的規(guī)則所適用的請求主機范圍。
第二行通過RewriteCond的Referer定義規(guī)則適用的請求來源地址,我們都知道任何通過互聯(lián)網(wǎng)方式訪問網(wǎng)站都會留下Referer的痕跡,就好像我們在IIS日志里看到的一樣。這里的(?!http://\1.*).*意思就是判斷所有通過http協(xié)義發(fā)來的請求,都要應(yīng)用規(guī)則。
第三行通過RewriteRule定義防盜鏈文件的后綴,這里僅是圖片后綴,需要的可以添加mp3,rar等其它所有后綴。后面的/block.gif表示如果遇上這些后綴的文件被盜鏈后的轉(zhuǎn)向,這里轉(zhuǎn)向/根目錄的block.gif,可以是HTML等任何文件。如果只想某個文件夾下面的文件不被盜鏈,只需要加上路徑就可以。例如不想images和pic目錄下的文件被盜,但其它可以。就要改寫成:
RewriteRule (/images/|/pic/).*\.(?:gif|jpg|jpeg|png|bmp) /block.gif [I,O,N]
這種情況主要是有些站長在別人友情鏈接里的圖片地址是在自己這的。
最后面的[I,O,N],I表示不區(qū)分大小寫,O表示對URL進行標準化,可能是用來處理Unicode編碼的地址(例如包含中文的URL)以及QueryString的內(nèi)容,N表示重新從站點請求文件而不是從本地緩存讀取文件,目的是防止當用戶訪問了盜你鏈的網(wǎng)站后,再回到你的網(wǎng)站也出現(xiàn)盜鏈提示。
提示,由于此規(guī)則是通過Referer來獲取帶有http://字樣的地址進行過濾,因此它無法防范其它協(xié)議的盜鏈,比如迅雷下載。但通過任何瀏覽器直接訪問,只要是HTTP協(xié)義的,通殺。
以上關(guān)于RewriteCond和RewriteRule的作用僅是本人的土法理解,歡迎在這方面有專業(yè)研究的朋友在評論中指正,以免誤導(dǎo),另外如果遇到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]
老板,來個小解:
第一行同上
第二行同上
第三行通過正則表達式對第二行中的請求協(xié)義地址進行過濾,這里按上面的寫法,過濾了所有流行的搜索引擎,當然也包括你自己的站,或是你同臺服務(wù)器其它的站。每個不同的域名寫法是\.baidu\.com,多個有|號相隔。如果是IP則這樣寫100\.100\.100\.100
第四行同上
這樣說明應(yīng)該不難理解吧,直接拿去用,按著原有格式改。
規(guī)則中出現(xiàn)的正則表達式符號小解:
. 表示匹配除換行符以外的任意字符
+ 表示前面的字符可以出現(xiàn)一到任意多次
* 表示前面的字符可以出現(xiàn)零到任意多次
() 表示一個表達組,可以拿它和加減乘除法一起理解
?! 表示斷言這個符號后面的字符如果出現(xiàn)則不再進行接下去的匹配
\ 表示轉(zhuǎn)義符號,比如網(wǎng)址中的.是規(guī)則內(nèi)置的運算符號,要把它通過\轉(zhuǎn)義成字符。
| 表示或者,用于連接多種可能
通過以上這“亂七八糟”的符號,竟然組成了如此強大的規(guī)則,感嘆!
關(guān)健詞:ISAPI-Rewrite
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動項
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機IP講解
- CentOS7使用hostapd實現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯
- 解決Centos7雙系統(tǒng)后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認iptable規(guī)則詳解