[htaccess] 2種禁止網站圖片被別人外連盜圖的方法,同時又不會檔掉 Google 圖片的搜尋

如何禁止別人外連盜圖
如何禁止別人外連盜圖

大家都說,在網路上就是內容為王(Content is King),不管你寫的是部落格,或是經營一個商務網站,製作的網頁上,免不了的就是有越來越多的照片、多媒體檔案,特別是社群媒體又那麼發達,沒圖沒真相,寫個文做網頁,要是不弄幾張圖片什麼的,都不好意思發佈了 XD


也因為這樣,所以當你的網站上圖片、影片越豐富,那麼就越有可能被別人盜連,辛辛苦苦的替別人做白工。


什麼是盜連呢?
就是說,總是有那樣一小群人,為了增加自己網站的內容,就四處抄襲,看哪裡有好文章,可以增加他們的流量,就直接偷。
偷文也就算了,最可惡的就是偷了之後連網頁上存在的圖片路徑都不改,原封不動的複製過去,這樣就等於把我們的網站當成她們的圖床,不僅偷圖,還兼偷流量。


也有的時候,單純就是看到某些網站上的照片很不錯,感覺很適合她們自己的某些內容,於是就單偷照片,一樣,偷圖又兼偷流量。


所以經常在查看流量報表時,都覺得奇怪,明明 Google 分析裡面記錄的瀏覽人次就不多(T_T),可是每月頻寬流量怎麼那麼大!?
這時候,就該好好的用點小技巧,看看如何禁止別人外連你網站上的圖片或各種格式的檔案


那要怎麼做呢?
在這篇文章中,我們來跟大家分享兩種方法來達成防止檔案、圖片被人外連盜連;
同時最後也會特別註明如果使用禁止外連,但不會把 Google 圖片檢索也給檔掉了的方法
一起看看吧!


1. 用 .htaccess 來禁止站內圖片被外連


第一種方法,就是用根目錄下的那個可愛無敵的小文字檔 .htaccess。


這個 .htaccess 真的可以說是任何一個網站的無名英雄。
首先它真的沒有名字(只有副檔名),所以無名。
再來它真的很厲害,所以英雄。


我們之前也寫過其他運用 htaccess 這個檔案來完成其他的任務。


我們可以看到很多時候都會用 htaccess 來進行轉址的工作,不管是 http 轉到 https,或是 non-www 轉到 www 等等,而這次的任務嚴格說起來,跟轉址在概念上也是一樣的,就是當有外部網站(不是你的網址範圍下),連到你的主機資源,在這裡指的資源,就是你網站上的圖片、影片等等,一旦有其他人外連這些資源,那麼 htaccess 就負責把這個資源給『轉』掉。


像是你可以把外連進來的要求,改成一張特定的圖片。
或是一律禁止掉外連的要求,讓偷圖的人什麼都連不到。


聽起來很厲害 :)
我們來看看這樣的 Code 要怎麼寫。


.htaccess 來禁掉所有外連的寫法


首先是把所有外連的要求,都直接禁掉(什麼都連不到)。


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)你的網址.com/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|bmp|zip|rar|mp3|flv|swf|xml|php|png|css|pdf)$ - [F]

我們一行一行的來簡單解讀一下。


第一行:RewriteEngine on
就是宣告啟動網址重寫功能,如果你之前已經有啟用過任何的轉址作業,那麼這段敘述應該就已經存在了,如果已經有的話,那麼就不重複再寫一次。


第二行跟第三行:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)你的網址.com/.*$ [NC]

這兩段程式碼的意思,就是跟伺服器說,如果參照網址(HTTP_REFERER)不是我們自己的網站的話,那麼我們就進行後面的動作。
記得在 https://(www\.)你的網址.com 這邊要換成你自己的網址。
最後面的那個 [NC],就是指不分大小寫的意思,大寫小寫都一樣。

什麼是參照網址/參照位址 HTTP_REFERER 呢?
就是當伺服器收到一個連線的要求時,http/https 同步會告訴伺服器,這個連線要求是從哪個位址發來的,我們經常在流量分析報表上看到的訪客來源,就是從這個資訊來的。
那麼如果一個連線的要求是一張圖片的話,那這個資訊提供的就是這張圖片的『所在網頁』。

就像上面說的,如果 HTTP_REFERER 傳來的資訊,顯示這張圖片的所在網頁,並不是我們自己的網站的時候,那麼就要開始採取行動囉。


接著往下看第四行(最後一行):

RewriteRule \.(gif|jpg|jpeg|zip|rar|mp3|xml|png|css|pdf)$ - [F]

這個就是跟伺服器說,如果上面的條件發生時(有人外連),那麼只要符合這些檔案格式的,就通通都不給連。


這裡的範例,顯示的檔案格式為:gif, jpg, jpeg, bmp, zip, rar, mp3, flv, swf, xml, php, png, css, pdf。


你也可以在這裡增加其他的格式,好比你的網站上有提供 svg 格式的向量圖檔,那麼這邊就直接加上變成:

RewriteRule \.(svg|gif|jpg|jpeg|zip|rar|mp3|xml|png|css|pdf)$ - [F]


如果有些格式你網站上都不會出現,也可以直接刪掉沒有問題,好比假設網站上絕對不會有 mp3 音樂檔或是 rar 的壓縮檔,那麼刪掉就會變成:

RewriteRule \.(svg|gif|jpg|jpeg|zip|xml|png|css|pdf)$ - [F]


.htaccess 來替換掉外連檔案的寫法


另一種寫法,就是不禁掉他,可是把他偷連的檔案,直接換成另外一張圖。


這裡換的圖檔就會在有人偷連的時候,直接顯示在他的網頁上。
所以大家就可以發揮創意了,看看是要換什麼樣圖片,是要讓偷連的人難堪呢?還是『善意提醒』他,不要偷連了。


我碰過一個朋友,是直接換上一張 FBI Warning 的警告 XD


來看看這個 code 要怎麼寫:


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)你的網址.com/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|png|svg)$ https://www.你的網址.com/你要更換的圖片.jpg [R,L]

這段 htaccess 的描述跟第一個幾乎都一樣,只有最後一段不同,我們就直接來看最後一段:

RewriteRule \.(gif|jpg|jpeg|png|svg)$ https://www.你的網址.com/你要更換的圖片.jpg

這裡就是跟伺服器說,如果有人外連,那麼就把這個外連要求,改為另一個圖片送出去 XD
如果你決定好要換哪一張圖片,這個圖片路徑就是寫在這裡。


全部禁止好?還是換圖片好呢?


我的建議是就直接禁止比較乾脆。


因為換圖片,感覺好像是可以出了一口氣,但其實偷連的人多半不會在乎。


而且要是偷連的人連檢查都不檢查,完全沒發現圖片被你換掉了,那麼這張圖片所耗掉的頻寬還是你的。
或者你也可以在更換的圖片上,直接白底黑字,寫上大大的這張圖片是來自某某網站,看能不能多拉一點流量進來。


2. 用 cPanel 內建功能來完成防止盜連


前面跟大家分享了第一種方法,用 .htaccess 的方式來進行避免外連。
接下來的第二種方法,也很簡單,就是直接使用 cPanel 內建的功能,來完成這個任務。


由於 cPanel 的版本蠻多的(從新到舊,還有不同的主題/Theme),所以這個功能的名稱或是圖示什麼的不盡相同,不過大致是不太會搞錯的,也很容易找。
我們這裡先以 cPanel v68.0.37 (Theme: Paper_Lantern)這個版本來做說明。

  • 登入你的 cPanel 的管理帳號後,
    在 SECURIPY(安全)這個區塊,裡面有一個功能圖示:Hotlink Protection

  • cPanel Security 區塊裡的功能圖示
    cPanel Security 區塊裡的功能圖示

  • 點進這個 Hotlink Protection 功能圖示,你會看到一個主要啟動的按鈕,和三個文字欄位。

  • 設定與啟用 Hotlink Protection
    設定與啟用 Hotlink Protection

  • 啟動按鈕就直接點下去,讓他啟用(Enable)。

  • 然後那三個文字欄位呢,下面我們逐一說明。
    • 第一個欄位:URLs to allow access
      這裡填入你的網址,包含www的完整網址或是如果你有其他的子域名,也一併填進來。

    • 第二個欄位:Block direct access for the following extensions (comma-separated)。
      這裡就填入你想要防止別人偷連的檔案格式,多個格式就用逗號(英文半形的逗號)分隔,
      好比我們上面的例子,就寫成:svg, gif, jpg, jpeg.....

    • 第三個欄位:Redirect the request to the following URL
      這裡就是填寫,如果你想要更換那些被偷連的圖片,圖片路徑就寫在這裡。
      如果留空的話,就表示不更換,全部禁止的意思。
特別提醒:
在這個功能頁面中,還有一個選項是 Allow direct requests (for example, when you enter the URL of an image in a browser)
這個選項要記得勾選,如果沒有勾選的話,那麼你單獨把自家網站的圖片路徑打在瀏覽器上來查看圖片,一樣會被禁止掉喔,所以這個選項要勾起來。

都填好了之後,按下 Submit,OK,收工。


是不是很簡單?


其實 cPanel 這個 Hotlink Protection 功能,跟我們第一個直接寫 htaccess 是一模一樣的,只是 cPanel 把他給表單化了,方便大家只需要負責填寫最少的重點資訊,然後就自動產生相對應的 htaccess 的指令。
大家也可以按下 submit 之後,到網站的根目錄,檢查一下 .htaccess 檔案,就會發現多了這些指令碼喔 ^^


禁止盜連外連的額外注意提醒


最後來跟大家分享一些關於防止外連的措施,連帶要留意的提醒事項。


首先就是,
無論是用 .htaccess 檔案手寫,或是啟用 cPanel 的 Hotlink Protection 功能,在填寫自己的網址的時候,除了標準的網址,像是從 https://www,你的網址名稱,這樣完整的URI的設定外,最好還要加上沒有 www 的網址,以及 https 和 http 這兩種協定都一起加上去,如果你有其他的子域名會一併使用主網站的圖片、檔案,那麼也要一併加上去,因為在這裡寫入的網址,就是所謂的白名單,只有這裡有列出的網址才能連結主網站的圖片,其的都算是『外連』,會一併被檔掉喔。


再來一個也很重要的事,就是這個外連技巧,會一併把 Google Images 圖片搜尋給檔掉喔。
如果你的網站有開啟讓 Google 圖片來檢索,那麼就要額外加上一條規則,讓 Google Images Bot(Googlebot-image)也成為白名單。


加上的 htaccess 寫法如下:

RewriteCond %{HTTP_USER_AGENT} !(.*Google.*)