Apache伺服器使用.htaccess實現圖片防盜鏈教學
Apache伺服器使用.htaccess實現圖片防盜鏈教學
許多網站因為自身的性質,要應用到很多圖片。隨著網站訪問量的上升,大量的圖片檔案對伺服器頻寬的佔用日趨嚴重,而其他網站對圖片的盜鏈則更雪上加霜。如果說其他網站不加說明不注出處地對我們內容的複製讓我們鬱悶的話,這種圖片的盜鏈則更過份:複製內容雖然在某種程度上可以說是剽竊我們的勞動成果,但畢竟對網站本身沒有太大的傷害,而圖片盜鏈則讓頻寬被無任何回報地佔用,影響網站的訪問速度。我們對此的反應也只是為圖片加入水印,加上我們網站的位址,希望這一方面能讓盜鏈者有所忌諱,另一方面即便被盜鏈,希望能有使用者循此找到我們網站。當然,這並不解決盜鏈的有效手段,但是,在我們目前基於Windows + IIS的伺服器平台對這個問題好像沒有什麼更好的辦法(僅是個人之見,可能不對。如蒙高手指點,不勝感激)。
這時候便不由自主地地感歎起伺服器平台選取的重要性來了,如果在Linux + Apache下,想要防止類似的盜鏈是相當簡單的,而IIS以圖形化的管理介面降低入手難度的同時,不免增加了許多管理上的難度。
下面簡單介紹一下筆者之前在Linux + Apache平台下防止圖片被盜鏈的設定方法,希望能對同樣面臨圖片盜鏈問題,伺服器基於Linux + Apache的朋友有所說明。
註:1、本文雖然談的是防止圖片盜鏈的問題,但設定也同樣適用於其他非Html類型的檔案,比如說下載網站的防盜鏈,只需將下面設定中的檔案類似由gif、jpg變更為相應的zip或rar即可。
2、本方法筆者在Linux + Apache下測試通過,而對於是否也同樣適用於Windows + Apache平台,則沒有把握,採用這類平台的朋友可自行測試。
Apache中的.htaccess檔案
.htaccess檔案(或是」分散式配置檔」)是Apache中相當重要的配置檔,其格式為純文字,它提供了針對目錄改變配置的方法,通過在一個特定的文件目錄中放置一個包括一個或多個指令的檔案,以作用於此目錄及其所有子目錄。
通過.htaccess檔案,可以實現簡單地很多在IIS中很繁瑣甚至無法實現的功能,如密碼保護、禁止顯示目錄清單、阻止/容許特定的IP位址、實現網址的301 重定向等。
正如上面所說, .htaccess檔案將影響其所在的目錄及其子目錄,因此,如果我們要保護的內容(此處以防止圖片盜鏈為例,即圖片)位於網站內多個目錄下,可以考慮將其放在根目錄下;而如果圖片有單獨的子目錄如「/images/」,則只需將其放置在該目錄下。
需要注意的是,如果通過FTP模式將建立好的.htaccess上傳到伺服器上,傳輸模式應為ASCII而非Binary。上傳到伺服器後,應將其屬性通過CHMOD修改為644 或「RW-R–R–」,這樣,可以保證伺服器能夠使用同時無法通過瀏覽器修改,當然,.htaccess的可讀屬性也存在一定的風險:攻擊者可通過它找出您要保護的對象或認證檔案位置——解決辦法是將認證檔案.htpasswd放到網站根目錄之外,這樣,便無法通過網路找到它了。
使用.htaccess禁止盜鏈
通過.htaccess來防止網站的圖片、壓縮檔、或視訊等非Html檔案被盜鏈的方法相當簡單,通過在.htaccess檔案中加入幾句指令即可保護我們寶貴的頻寬。
通過.htaccess來防止網站的圖片、壓縮檔、或視訊等非Html檔案被盜鏈的方法相當簡單,通過在該檔案中加入幾句指令即可保護我們寶貴的頻寬。例如本站的設定如下:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://itlore.cn/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://itlore.cn$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.itlore.cn/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.itlore.cn$ [NC]
RewriteCond %{HTTP_REFERER} !^http://itlore.ch/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://itlore.ch$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.itlore.ch/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.itlore.ch$ [NC]
RewriteCond %{HTTP_REFERER} !^http://blog.itlore.ch/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://blog.itlore.ch$ [NC]
RewriteRule .(gif|jpg)$ http://botu.bokee.com/photodata2/2008-3-30/001/168/952/14901157_gif/14901157_h.jpg [R,L]
簡單的解釋一下上述語句:
1、RewriteCond %{HTTP_REFERER} !^$ [NC]
容許空「HTTP_REFERER」的訪問,即容許使用者在瀏覽器位址欄中直接輸入圖片位址時圖片檔案的顯示。一般而言,這是可選的,不過,建議這麼設定,如果強迫必須具有「HTTP_REFERER」才能訪問,可能會帶來某些問題,比如說在使用者通過代理伺服器訪問時。
2、RewriteCond %{HTTP_REFERER} !domain.com [NC]
設定容許訪問的HTTP來源,內含我們的站台自身、Google、Baidu、Bloglines、Feedburner等。
3、RewriteRule .*.(gif|jpg|png)$ http://domain.com/no.png [R,NC,L]
定義被盜鏈時替代的圖片,讓所有盜鏈 jpg、gif、png 等檔案的網頁,顯示根目錄下的 no.png 檔案。注意:取代顯示的圖片不要放在設定防盜鏈的目錄中,並且該圖片檔案體積越小越好。當然你也可以不設定取代圖片,而是使用下面的語句即可:
RewriteRule .*.(gif|jpg|png)$ – [F]
4、說明一下其中的R、NC 和 L
R 就是轉向的意思
NC 指的是不區分大小寫
L 的作用是指明本次轉向到此結束,後續的轉向不受先前判斷語句的影響
5、防止盜鏈的檔案類型
上例中是 gif、jpg、png,而根據需要,可變更或加入其他檔案類型,如rar、mov等,不同檔案副檔名間使用「|」分割。
這樣的話,就可以基本做到簡單的防止被盜鏈情況的發生,而且可以盡最大可能的減少伺服器流量的無畏消耗,當然了,如果你不在意這點流量的話,那麼可以不用考慮上述設定啦!