本規(guī)則支持白名單排除式防盜鏈,搜索引擎友好不屏蔽,被盜鏈后的錯誤提示轉向,支持各種文件類型,經作者親驗真的能用,第一時間在itmop.com原創(chuàng)發(fā)表,請繼續(xù)往下閱讀。
近來小站遇到了盜鏈問題,至使網站的流量枉費流失,于是被迫準備為服務器安裝防盜鏈機制以挽救本就不寬裕的帶寬。通過G.CN和B.CN搜索后得出了幾種不同的方案,例如網站程序的URL偽裝法、服務器端的收費插件法和ISAPI-REWRITE的規(guī)則過濾法等,考慮自身網站結構和錢包的困難問題,最終選擇了后者,即現在流行用來做偽靜態(tài)的ISAPI Rewrite書寫規(guī)則來實現我的防盜鏈"夢想"。
為什么說是夢想呢?首先表示惋惜,懶人我搜來了一大票經過無數次轉載而來的文章,把現呈的代碼應用后發(fā)現要么根本不起作用,要么就是效果達不到我想要的,幾經周折后終于把這原本認為可以輕易借鑒照搬的防盜鏈給完成了,恨那些只會轉載和偽原創(chuàng)的站長們,自己也不試試就拿來填充,害了多少人浪費了大把的時間。
經過惡補正則表達式相關教程并對前輩們留下的規(guī)則進行修改后,以下ISAPI Rewrite已經在我的服務器上正常運作。
經測試四種情況正常,即站內鏈接正常,白名單里的鏈接正常,盜鏈者鏈接屏蔽,搜索引擎鏈接正常。
詳細如下;
一、完全屏蔽所有盜鏈來源的寫法(如已有其它規(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ī)則適用的請求來源地址,我們都知道任何通過互聯網方式訪問網站都會留下Referer的痕跡,就好像我們在IIS日志里看到的一樣。這里的(?!http://\1.*).*意思就是判斷所有通過http協(xié)義發(fā)來的請求,都要應用規(guī)則。
第三行通過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表示不區(qū)分大小寫,O表示對URL進行標準化,可能是用來處理Unicode編碼的地址(例如包含中文的URL)以及QueryString的內容,N表示重新從站點請求文件而不是從本地緩存讀取文件,目的是防止當用戶訪問了盜你鏈的網站后,再回到你的網站也出現盜鏈提示。
提示,由于此規(guī)則是通過Referer來獲取帶有http://字樣的地址進行過濾,因此它無法防范其它協(xié)議的盜鏈,比如迅雷下載。但通過任何瀏覽器直接訪問,只要是HTTP協(xié)義的,通殺。
以上關于RewriteCond和RewriteRule的作用僅是本人的土法理解,歡迎在這方面有專業(yè)研究的朋友在評論中指正,以免誤導,另外如果遇到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é)義地址進行過濾,這里按上面的寫法,過濾了所有流行的搜索引擎,當然也包括你自己的站,或是你同臺服務器其它的站。每個不同的域名寫法是\.baidu\.com,多個有|號相隔。如果是IP則這樣寫100\.100\.100\.100
第四行同上
這樣說明應該不難理解吧,直接拿去用,按著原有格式改。
規(guī)則中出現的正則表達式符號小解:
. 表示匹配除換行符以外的任意字符
+ 表示前面的字符可以出現一到任意多次
* 表示前面的字符可以出現零到任意多次
() 表示一個表達組,可以拿它和加減乘除法一起理解
?! 表示斷言這個符號后面的字符如果出現則不再進行接下去的匹配
\ 表示轉義符號,比如網址中的.是規(guī)則內置的運算符號,要把它通過\轉義成字符。
| 表示或者,用于連接多種可能
通過以上這"亂七八糟"的符號,竟然組成了如此強大的規(guī)則,感嘆!
關鍵詞標簽:IIS,ISAPI-Rewrite,防
相關閱讀
熱門文章 ISAPI Rewrite實現IIS圖片防盜鏈 IIS6.0下配置MySQL+PHP5+Zend+phpMyAdmin 在Windows服務器上快速架設視頻編解碼器全攻略 win2000server IIS和tomcat5多站點配置
人氣排行 XAMPP配置出現403錯誤“Access forbidden!”的解決辦法 WIN2003 IIS6.0+PHP+ASP+MYSQL優(yōu)化配置 訪問網站403錯誤 Forbidden解決方法 如何從最大用戶并發(fā)數推算出系統(tǒng)最大用戶數 Server Application Unavailable的解決辦法 報錯“HTTP/1.1 400 Bad Request”的處理方法 Windows Server 2003的Web接口 http 500內部服務器錯誤的解決辦法(windows xp + IIS5.0)