盜鏈直接消耗源站帶寬、加速流量成本、影響正常用戶體驗。Apache 通過 mod_rewrite 在 .htaccess 中實現基於 Referer 的防盜鏈,零成本、即時生效、無需重啟服務。
mod_rewrite 模組 (`LoadModule rewrite_module modules/mod_rewrite.so`)。RewriteEngine On
# 1. 允許空 Referer (用戶直接在瀏覽器地址欄輸入圖片 URL)
RewriteCond %{HTTP_REFERER} !^$ [NC]
# 2. 允許自身域名 (含子域名)
RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?example\.com [NC]
# 3. 允許主流搜索引擎/閱讀器抓取 (SEO/用戶體驗)
RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?(baidu|google|bing|yahoo|sogou|360|feedly|feedburner|feedsky)\.com [NC]
# 4. 執行防盜鏈:匹配目標副檔名 → 重定向至替換圖片 或 返回 403
# 方案 A:返回替換圖片 (推薦體驗較好)
RewriteRule \.(gif|jpg|jpeg|png|bmp|webp|svg|mp4|flv|f4v|m3u8|ts|pdf|zip|rar|apk)$ /static/images/hotlink-denied.png [R,NC,L]
# 方案 B:直接返回 403 Forbidden (節省帶寬,無替換圖片請求)
# RewriteRule \.(gif|jpg|jpeg|png|bmp|webp|svg|mp4|flv|f4v|m3u8|ts|pdf|zip|rar|apk)$ - [F,NC,L]
| 標誌 | 含義 |
|---|---|
NC | No Case,大小寫不敏感 |
R | Redirect,發送 302 重定向 (可加 =301 永久重定向) |
L | Last,停止後續規則處理 |
F | Forbidden,直接返回 403,不重定向 |
Referer 可偽造,高價值資源 (付費視頻、私密文檔) 建議應用層生成簽名 URL (如 /video/lesson1.mp4?sign=xxx&t=1700000000),Nginx/Apache `ngx_http_auth_request_module` / `mod_auth_token` 驗證簽名與過期時間,徹底杜絕盜鏈。