htaccess防盜鏈的新法

.htaccess 設(shè)置:雖然理論上而言,在Apache中,可以針對(duì)每個(gè)目錄分別設(shè)置 .htaccess ,通過(guò)權(quán)限的繼承與覆蓋可以實(shí)現(xiàn)相當(dāng)復(fù)雜的功能。不過(guò),過(guò)多的 .htaccess 往往會(huì)增加管理的難度,有時(shí)候百密難免有一疏,修改 .htaccess 稍有遺漏便可能造成網(wǎng)站出現(xiàn)問(wèn)題。
默認(rèn)情況下禁止其他網(wǎng)站盜鏈:對(duì)圖片文件而言,當(dāng)其他網(wǎng)站使用 盜鏈時(shí)自動(dòng)重定向至類(lèi)似右圖所示的圖片,聲明版權(quán)及宣傳您的網(wǎng)站。當(dāng)然,從降低對(duì)服務(wù)器帶寬占用的角度考慮,這個(gè)圖片文件不能過(guò)大,您也可以簡(jiǎn)單地拒絕其訪問(wèn),讓其網(wǎng)頁(yè)上圖片位置以紅“x”號(hào)代替。
允許特定訪問(wèn)來(lái)源:?jiǎn)渭冡槍?duì)圖片文件來(lái)說(shuō),事實(shí)上也不可能禁止所有除您自身網(wǎng)站之外的其他訪問(wèn),比如說(shuō)Google,如果您希望通過(guò)Google圖片搜索獲得一定訪問(wèn)的話,必須讓其能夠正確讀取真正的圖片文件,再如應(yīng)能夠讓RSS訂閱用戶(hù)看到feed中的圖片,這就要求允許來(lái)自bloglines等的訪問(wèn)。
允許特定目錄下的文件被外部網(wǎng)站使用:完全禁止外部網(wǎng)站有時(shí)會(huì)帶來(lái)不便,很多時(shí)候,我們自己也可能需要在外部網(wǎng)站使用部分文件。當(dāng)然,放入這些目錄的文件要有一定限制,不然,便失去設(shè)置防盜鏈的意義了。
設(shè)置 .htaccess 禁止圖片盜鏈
下面即為博客學(xué)堂禁止圖片盜鏈的 .htaccess 設(shè)置部分:

1
2
3
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/(allow1|allow2)
RewriteRule ^.*$ - [L]

首先,設(shè)置允許可“盜鏈”即外部網(wǎng)站可以使用的文件所處目錄,上面我們?cè)O(shè)置了兩個(gè)目錄,分別為allow1與allow2,當(dāng)然,如果您只有一個(gè)目錄的話,可以將其改為:

1
RewriteCond %{REQUEST_URI} ^/allow1


接下來(lái)判斷是否為圖片文件:

1
RewriteCond %{REQUEST_FILENAME} \.(gif|jpeg|png|swf|flv|zip|rar|txt|exe)$ [NC]

您也可以根據(jù)自己的需要設(shè)置更多的文件類(lèi)型。

1
RewriteCond %{HTTP_REFERER} !^$

上面這一行意在允許空“HTTP_REFERER”的訪問(wèn),即允許用戶(hù)在瀏覽器地址欄中直接輸入圖片地址時(shí)圖片文件的顯示。一般而言,這是可選的,不過(guò),建議這么設(shè)置,如果強(qiáng)迫必須具有“HTTP_REFERER”才能訪問(wèn),可能會(huì)帶來(lái)某些問(wèn)題,比如說(shuō)在用戶(hù)通過(guò)代理服務(wù)器訪問(wèn)時(shí)。

1
2
3
4
5
RewriteCond %{HTTP_REFERER} !blogsdiy\.org [NC]
RewriteCond %{HTTP_REFERER} !google\.com [NC]
RewriteCond %{HTTP_REFERER} !baidu\.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines\.com [NC]
RewriteCond %{HTTP_REFERER} !feedburner\.com [NC]

設(shè)置允許訪問(wèn)的HTTP來(lái)源,包括博客學(xué)堂自身、Google、Baidu、Bloglines、Feedburner等。

1
RewriteRule (.*) /allow1/leech.gif [R,NC,L]

將不滿(mǎn)足上述條件的訪問(wèn)重定向至leech.gif。您可能已經(jīng)注意到,leech.gif位于允許“盜鏈”的目錄allow1下,這一點(diǎn)很重要,不然,您的警告信息圖片將無(wú)法在對(duì)方網(wǎng)站上顯示。

如此,即實(shí)現(xiàn)了我們預(yù)先設(shè)定的防止圖片盜鏈目標(biāo)。

其他類(lèi)型文件的防盜鏈設(shè)定
如果您的網(wǎng)站上存在其他類(lèi)似體積較大較耗費(fèi)帶寬的文件如flash、mp3被其他網(wǎng)站盜鏈,可以同樣采取上述策略,比如說(shuō),對(duì)Flash文件,可用類(lèi)似如下的設(shè)置:

1
2
3
4
5
6
7
RewriteCond %{REQUEST_URI} ^/allow1
RewriteRule ^.*$ - [L]RewriteBase /
RewriteCond %{REQUEST_FILENAME} \.swf$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !blogsdiy\.org [NC]
(……其他允許訪問(wèn)來(lái)源)
RewriteRule (.*) /allow1/leech.swf [R,NC,L]

當(dāng)然,需要事先創(chuàng)建一個(gè)聲明版權(quán)信息的flash文件“l(fā)eech.swf”。其他諸如防止mp3文件、壓縮文件(zip或rar)盜鏈的設(shè)置與此類(lèi)似,不再贅述。

收藏自:塵色記憶