使用 rewrite 技術實現 Apache 防盜鏈

一. 使用 rewrite 技術實現 Apache 防盜鏈

Apache 防盜鏈的第一種實現方法,能夠用 rewrite 實現。首先要確認 Apache 的 rewrite module 可用:可以控制 Apache httpd.conf 文件的,打開 httpd.conf,確保有這麼一行配置:web

LoadModule rewrite_module modules/mod_rewrite.so
而後在找到本身網站對應的 配置的地方,加入下列代碼:
ServerName xiaohui.com

# 防盜鏈配置  RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://xiaohui.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://xiaohui.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.xiaohui.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.xiaohui.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.xiaohui.com/about/nolink.png [R,NC]
防盜鏈配置的說明
  1. 紅色部分: 表示本身的信任站點。對個人站點來講,設置爲 http://www.xiaohui.com 和 http://xiaohui.com
  2. 綠色部分: 要保護文件的擴展名(以|分開)。以這些爲擴展名的文件,必須經過紅色標註的網址引用,才能夠訪問。
  3. 藍色部分: 盜鏈後的重定向頁面。用以輸出警示信息,這張圖片應該儘量的小。例如個人警示圖片是 http://www.xiaohui.com/about/nolink.png。爲了簡單處理的緣由,個人綠色字體部分,要保護的圖片擴展中,沒有 .png 的圖片,而警示圖片是 .png的。(我站內沒有 .png的其餘圖片)

而後從新啓動 apache 服務器便可。apache

有些用戶使用的是虛擬主機,沒有服務器的控制權,沒法修改 httpd.conf 文件和重啓服務器。那麼請確認你的虛擬主機支持 .htaccess,將上面的配置寫入 .htaccess 文件,放入根目錄或圖片所在的目錄便可:瀏覽器

.htaccess 文件的內容:

# 防盜鏈配置 
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://xiaohui.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://xiaohui.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.xiaohui.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.xiaohui.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.xiaohui.com/about/nolink.png [R,NC]
注意:
  1. httpd.conf 文件裏的配置,是在 apache 啓動時一次讀取,效率很高
  2. .htaccess 文件裏的配置,每次訪問都須要讀取分析,效率很低。
缺點:
宿主站內的在線播放器也沒法支持了(播放器不傳REFERER),可是魚和熊掌不可兼得,等將來播放器也支持referer標準吧……
一個可能的辦法就是:容許全部的播放器,只對瀏覽器、蜘蛛、抓取器等進行站外控制;
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com/.*$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^NSPlayer.*
RewriteCond %{HTTP_USER_AGENT} !^Windows.*
多個RewriteCond 之間是AND的關係

二. 使用 SetEnvIfNoCase 和 access 技術實現 Apache 防盜鏈

另外一種方式是利用 SetEnvIfNoCase 和 access。具體的代碼以下:服務器

SetEnvIfNoCase Referer "^http://xiaohui.com" local_ref=1
SetEnvIfNoCase Referer "^http://www.xiaohui.com" local_ref=1

Order Allow,Deny
Allow from env=local_ref
將上述代碼,放入前面所講的 httpd.conf 或 .htaccess 文件便可。

下面是引用木頭同窗的:dom

位置通常狀況下在 /usr/local/apache/conf/httpd.conf
或者apache 2.2 的 /usr/local/apache2/conf/extra/httpd-vhost.conf
添加字體

  1. SetEnvIfNoCase Referer "^http://www.ccvita.com" local_ref=1
  2. SetEnvIfNoCase Referer "^http://ccvita.com" local_ref=1
  3. <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
  4. Order Allow,Deny
  5. Allow from env=local_ref
  6. </filesmatch>

其中粗體的是您的網址,若是有多個,就加多行
斜體的是您須要防盜鏈的文件後綴,中間用|隔開網站

還一種寫法,是用正則的,這種寫法在各個版本的apache比較通用。
寫法是ui

  1. SetEnvIfNoCase Referer "^http://.*\.yourdomin\.com" local_ref=1
  2. SetEnvIfNoCase Referer ".*\.yourdomin\.com" local_ref=1
  3. <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
  4. Order Allow,Deny
  5. Allow from env=local_ref
  6. </filesmatch>

其中粗體的部分有一點區別,用正則寫法, \ 符號表明轉義,由於.自己在正則中有本身的做用。spa

相關文章
相關標籤/搜索