首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Apache .htaccess 防盜鏈完整設定:RewriteCond 與 RewriteRule 實戰

     編輯:PHP 綜合知識

防盜鏈原理

HTTP 請求攜帶 Referer 標頭表示來源頁面。伺服器檢查 Referer 是否為自家域名(或允許的搜尋引擎),非授權來源則回傳 403 或替換圖片,節省頻寬並保護資源。

方法一:基本防盜鏈(回傳 403 Forbidden)

RewriteEngine On
# 允許空 Referer(直接輸入圖片網址、書籤、部分代理)
RewriteCond %{HTTP_REFERER} !^$ [NC]
# 允許自家域名(含 www 子域)
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
# 允許主流搜尋引擎抓取(利於 SEO)
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?(google|bing|baidu)\.com [NC]
# 匹配圖片副檔名,拒絕存取
RewriteRule \.(jpe?g|png|gif|webp|svg)$ - [F,NC,L]

方法二:替換盜鏈圖片(回傳警示圖)

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?(google|bing|baidu)\.com [NC]
# 替換為指定圖片(注意:警示圖放在不受防盜鏈保護的目錄,或用絕對路徑)
RewriteRule \.(jpe?g|png|gif|webp|svg)$ /assets/images/hotlink-placeholder.png [R,NC,L]

指令詳解

標記含義
NCNo Case,不分大小寫匹配
FForbidden,回傳 403
RRedirect,外部重導向(預設 302)
LLast,停止後續規則處理

進階技巧

1. 保護更多檔案類型

RewriteRule \.(jpe?g|png|gif|webp|svg|pdf|zip|rar|mp4|mov)$ - [F,NC,L]

2. 允許多個授權域名

RewriteCond %{HTTP_REFERER} !^https?://(www\.)?(example\.com|partner\.com|cdn\.example\.com) [NC]

3. 排除特定目錄(如縮圖、水印圖)

RewriteCond %{REQUEST_URI} !^/images/thumbs/ [NC]
RewriteCond %{REQUEST_URI} !^/images/watermark/ [NC]

4. 記錄盜鏈日誌(需 mod_log_config)

LogFormat "%{Referer}i %U %h %l %u %t \"%r\" %>s %b" hotlink
CustomLog logs/hotlink.log hotlink env=hotlink_denied
SetEnvIf Request_URI "\.(jpe?g|png|gif)$" hotlink_check
# 配合 RewriteRule 設定 env 變數需額外模組,建議改用應用層記錄

部署注意事項

  • .htaccess 檔案上傳模式務必選 ASCII,權限設為 644。
  • 若主機關閉 AllowOverride,.htaccess 不生效,需修改 httpd.conf 或聯繫主機商。
  • CDN(Cloudflare、AWS CloudFront 等)通常在邊緣節點提供防盜鏈功能,效能優於源站 .htaccess,建議優先在 CDN 設定。
  • Referer 可被偽造或被瀏覽器/防火牆移除,防盜鏈屬「紳士協定」,無法 100% 阻擋,核心資源仍需簽名 URL 或 Token 驗證。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved