真正可用的IIS的ISAPI-Rewrite偽靜態URL圖片防盜鏈規則寫法_win伺服器

來源:互聯網
上載者:User
網站程式的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]


第一行同上
第二行同上
第三行通過Regex對第二行中的請求協義地址進行過濾,這裡按上面的寫法,過濾了所有流行的搜尋引擎,當然也包括你自己的站,或是你同台伺服器其它的站。每個不同的網域名稱寫法是\.baidu\.com,多個有|號相隔。如果是IP則這樣寫100\.100\.100\.100
第四行同上
這樣說明應該不難理解吧,直接拿去用,按著原有格式改。
規則中出現的Regex符號小解:
. 表示匹配除分行符號以外的任一字元
+ 表示前面的字元可以出現一到任意多次
* 表示前面的字元可以出現零到任意多次
() 表示一個表達組,可以拿它和加減乘除法一起理解
?! 表示斷言這個符號後面的字元如果出現則不再進行接下去的匹配
\ 表示轉義符號,比如網址中的.是規則內建的運算子號,要把它通過\轉義成字元。
| 表示或者,用於串連多種可能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.