1. 程式人生 > 資料庫 >使用.htaccess設定圖片防盜鏈的詳細方法

使用.htaccess設定圖片防盜鏈的詳細方法

真正有用的.htaccess寫法為

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !jb51.net [NC]
RewriteCond %{HTTP_REFERER} !youdao.com [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !twitter.com [NC]
RewriteCond %{HTTP_REFERER} !facebook.com [NC]
RewriteCond %{HTTP_REFERER} !xianguo.com [NC]

RewriteCond %{HTTP_REFERER} !google.cn [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !google.com.tw [NC]
RewriteCond %{HTTP_REFERER} !google.com.sg [NC]
RewriteCond %{HTTP_REFERER} !google.com.hk [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
RewriteCond %{HTTP_REFERER} !soso.com [NC]
RewriteCond %{HTTP_REFERER} !mail.qq.com [NC]
RewriteCond %{HTTP_REFERER} !cn.bing.com [NC]
RewriteCond %{HTTP_REFERER} !image.baidu.com [NC]
RewriteCond %{HTTP_REFERER} !feedburner.com [NC]
RewriteCond %{HTTP_REFERER} !feedsky.com [NC]
RewriteRule .(png|jpg)$ /no.gif [R,NC,L]

我把.htaccess檔案和no.gif檔案一起上傳到了根目錄,注意看最後一行,當指定型別(png或jpg)的圖片出現在非上述列表中的網站時,圖片會自動替換成no.gif。

解釋一下上述語句:

1、RewriteCond %{HTTP_REFERER} !^$ [NC]
允許空“HTTP_REFERER”的訪問,即允許使用者在瀏覽器位址列中直接輸入圖片地址時圖片檔案的顯示。一般而言,這是可選的,不過,建議這麼設定,如果強迫必須具有“HTTP_REFERER”才能訪問,可能會帶來某些問題,比如說在使用者通過代理伺服器訪問時。

2、 RewriteCond %{HTTP_REFERER} !zhukun.net [NC]
設定允許訪問的HTTP來源,包括我們的自身站點、Google、Baidu、Bloglines、Feedburner、feedsky等。

3、 RewriteRule .(jpg|png)$ /no.gif [R,L]
定義被盜鏈時替代的圖片,讓所有盜鏈 jpg、png 等圖片的網頁,顯示根目錄下的 no.gif 檔案。注意:這裡必須有一個“/”,而且no.gif件體積越小越好,越小就越節省流量。

4、說明一下其中的 R、NC 和 L
R 就是轉向的意思
NC 指的是不區分大小寫
L 指明本次轉向到此結束,後續的轉向不受先前判斷語句的影響

特別注意:不建議同時禁止gif|jpg|png這三種圖片檔案,比如你已經禁止了gif,但是卻用了no.gif來替換盜鏈圖片,這樣肯定會出問題。如果你想同時禁止這三種類型,可以使用以下方法來解決:

RewriteRule .(gif|png|jpg)$ http://farm3.static.flickr.com/2743/4462030670_dc36df0e3d_o.png [R,L]

即用其它伺服器上(未設定過防盜鏈)的圖片來替換演示。

本方法已在Godaddy的免費空間上測試成功,再次宣告一下,清風小荷塘原創文章,轉載請標明來源。

下面是其它網友的補充,直接本地例外一個目錄

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/images
RewriteRule ^.*$ - [L]
RewriteCond %{REQUEST_FILENAME} \.(jpg|gif|bmp|zip|rar|mp3|txt|png|wma|wmv)$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !www.laoyao.me [NC]
RewriteCond %{HTTP_REFERER} !laoyao.me [NC]
RewriteCond %{HTTP_REFERER} !www.zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !www.google.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !www.google.com.hk [NC]
RewriteCond %{HTTP_REFERER} !google.com.hk [NC]
RewriteCond %{HTTP_REFERER} !www.google.cn [NC]
RewriteCond %{HTTP_REFERER} !google.cn [NC]
RewriteCond %{HTTP_REFERER} !www.baidu.com [NC]
RewriteCond %{HTTP_REFERER} !www.baidu.cn [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.cn [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
RewriteCond %{HTTP_REFERER} !www.ask.com [NC]
RewriteCond %{HTTP_REFERER} !www.163.com [NC]
RewriteCond %{HTTP_REFERER} !www.yahoo.com [NC]
RewriteCond %{HTTP_REFERER} !www.sogou.com [NC]
RewriteCond %{HTTP_REFERER} !www.soso.com [NC]
RewriteCond %{HTTP_REFERER} !www.sina.com.cn [NC]
RewriteCond %{HTTP_REFERER} !www.msn.com [NC]
RewriteCond %{HTTP_REFERER} !www.feedsky.com [NC]
RewriteCond %{HTTP_REFERER} !www.feedburner.com [NC]
RewriteRule (.*) /images/error.gif [R,L]

程式碼說明:程式碼第二行,意思是將網站images目錄的許可權開啟,也就是說images資料夾下的圖片不進行防盜鏈,為什麼呢?因為我們的盜鏈警告圖片放在這個目錄下,你要是不把這個目錄許可權開啟,那麼別人盜鏈的時候,連這張盜鏈警告圖片也顯示不出來,只能顯示紅叉叉,這不是我們想要的效果。程式碼第四行為需要防盜鏈檔案的字尾名,可以自行根據需要修改。後邊那些程式碼的意思是哪些網站可以不防盜鏈,都是一些搜尋引擎之類的,還有自己站的網址。程式碼最後一行為盜鏈時顯示的警告圖片。也可以將這張圖片存放到其他的網站,比如某些圖片儲存空間,這樣的話就可以更加節省本站流量了。

補充方法三:

.htaccess寫法為如下,下載本文的附件,附件中包括了PSD原始檔。周到吧,為了不想再做圖片的,只要開啟改一下網址就可以用了,當然也可以自己設計!國外虛擬主機流量太小,圖片防盜連結是必須做的。

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !yziw.net [NC]
RewriteCond %{HTTP_REFERER} !youdao.com [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !twitter.com [NC]
RewriteCond %{HTTP_REFERER} !facebook.com [NC]
RewriteCond %{HTTP_REFERER} !xianguo.com [NC]
RewriteCond %{HTTP_REFERER} !google.cn [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !google.com.tw [NC]
RewriteCond %{HTTP_REFERER} !google.com.sg [NC]
RewriteCond %{HTTP_REFERER} !google.com.hk [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
RewriteCond %{HTTP_REFERER} !soso.com [NC]
RewriteCond %{HTTP_REFERER} !mail.qq.com [NC]
RewriteCond %{HTTP_REFERER} !cn.bing.com [NC]
RewriteCond %{HTTP_REFERER} !image.baidu.com [NC]
RewriteCond %{HTTP_REFERER} !feedburner.com [NC]
RewriteCond %{HTTP_REFERER} !feedsky.com [NC]
RewriteRule .(gif|png|jpg)$ http://www.yziw.net/images/linkeldiy.png [R,L]

注意:最後一行替換圖片要改成自己的

禁止圖片外鏈.htaccess檔案下載

繼續補充一下

先解釋一下圖片防盜鏈和轉向:

Q 圖片防盜鏈有什麼用?
A 防止其它網站盜用你的圖片,浪費你寶貴的流量。

Q 圖片轉向有什麼用?
A 如果你的網站以圖片為主,哪天發現月底沒到流量就快用光了,那就可以利用圖片轉向,在不修改網頁的前提下,把圖片下載請求轉向到其它空間(比如試用主機),臨時過渡。

下面開始講解,比如你的圖片都在img目錄下,那就在該目錄下放一個名為 .htaccess 的檔案,內容如下:

RewriteEngine on

RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !chong4.com.cn [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]

RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,L]

RewriteRule ^(.*)$ http:\/\/image.chong4.com.cn\/image\/$1 [L]

大概解釋一下:

RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !chong4.com.cn [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]

這部分是判斷是否盜鏈,如果以上條件都成立(即訪問圖片的請求,既不是直接輸入網址,也不是來自chong4.com.cn,也不是來自zhuaxia.com,也不是來自google.com,也不是來自baidu.com,也不是來自bloglines.com 的話),就執行下列轉向:

RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,L]

意思是讓所有盜鏈 img 目錄下 jpg、gif、png、bmp、swf、jpeg 檔案的網頁,顯示的圖片都用 image 目錄下的 replace.gif 圖片替換掉。注意替換顯示的圖片不要放在設定防盜鏈的 img 目錄下。

如果照上面的規則判斷出圖片請求不是盜鏈的,就執行以下轉向:

RewriteRule ^(.*)$ http:\/\/image.chong4.com.cn\/image\/$1 [L]

意思對 img 目錄下所有的請求都轉向到目標伺服器,比如有個圖片原來的 url 是 http://www.chong4.com.cn/img/girl.jpg ,現在就會轉到 http://image.chong4.com.cn/image/girl.jpg 去。當然了你得先把原伺服器 img 目錄下的檔案統統拷貝到臨時伺服器的 image 目錄下,轉向才會真正可用。起到的效果就是把原伺服器圖片下載所佔用的流量統統省下,讓臨時伺服器來承受了。