我在我的.htaccess檔案中使用了這段代碼,它可以很好地防止盜鏈:
RewriteEngine On
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/.*
RewriteRule \.(gif|jpg|jpeg|png|tif|pdf|wav|wmv|wma|avi|mov|mp4|m4v|mp3|zip?)$ - [F]
現在我想允許我的一個子域 ( cdn.example.com) 使用 GET 請求訪問我的檔案。
無法將 http_reffer 添加到我的 GET 請求中!我應該只用.htaccess.
我應該如何在此代碼中將我的子域添加為例外?
uj5u.com熱心網友回復:
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/.*
請改用以下條件來允許可選的cdn子域:
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://(cdn\.)?\1/
(尾隨.*不是必需的。)
更新#1:
無法將 http_reffer 添加到我的 GET 請求中!
不確定你的意思是什么,但如果由于Referer某種原因沒有與這些請求一起發送標頭(也許你有一個限制性的 Referrer-Policy?),那么你可能需要允許一個空的referer。
要允許為空 Referer,請添加以下內容作為第一個條件:
RewriteCond %{HTTP_REFERER} !^$
:
但是,這也將允許直接請求。但是由于Referer標題的不可靠性質,您確實需要允許一個空 Referer標題,因為一些合法用戶可能會抑制它。
另外:這些防止盜鏈的指令也會阻止搜索引擎——如果這是一個問題?
更新#2:
我有另一個用于 cdn.mydomain.com 的服務器。在該服務器上,我有一個 php 腳本,可以將影像轉換為特定格式。我應該允許這個腳本從主域讀取影像
:
我不能編輯那個 php 腳本來改變請求方法
理想情況下,該腳本將發送一個自定義 HTTP 請求標頭,指示該請求來自您的“CDN”。然后,您可以在上述指令中檢查這一點以允許請求。
如果所有這些請求都直接來自此其他服務器,那么您也許可以允許來自此服務器的所有請求 - 由服務器的 IP 地址標識。
例如,如果203.0.113.111是您服務器的 IP 地址,則:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !=203.0.113.111
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/
RewriteRule \.(gif|jpg|jpeg|png|tif|pdf|wav|wmv|wma|avi|mov|mp4|m4v|mp3|zip?)$ - [F]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/439134.html
上一篇:如何防止url強制訪問檔案
