在盗链中添加一个子域作为例外
Add a subdomain as an exception in hotlinking
我在我的 .htaccess
文件中使用了这段代码,它可以很好地防止盗链:
RewriteEngine On
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?:///.*
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
.
来处理它
我应该如何在此代码中将我的子域添加为例外?
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?:///.*
使用以下 条件 来允许可选的 cdn
子域:
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://(cdn\.)?/
(不需要结尾的 .*
。)
更新#1:
It is not possible to add http_reffer to my GET request!
不确定您的意思,但是如果 Referer
header 由于某种原因没有与这些请求一起发送(也许您有限制性的 Referrer-Policy?)那么您可能需要允许 empty referer.
要允许 empty Referer
,请添加以下内容作为第一个 条件:
RewriteCond %{HTTP_REFERER} !^$
:
但是,这也将允许 直接 请求。但是由于 Referer
header 的不可靠性质,您确实需要允许 empty Referer
header 无论如何,因为一些合法用户可能会抑制它。
旁白: 这些防止盗链的指令也会阻止搜索引擎 - 如果这是一个问题?
更新#2:
i have another server for cdn.mydomain.com . and on that server i have a php script that will convert images to specific format . i should allow this script to read images from main domain
:
i can't edit that php script to change request method
理想情况下,脚本将发送一个自定义 HTTP 请求 header,表明该请求来自您的“CDN”。然后您可以在上面的指令中检查是否允许该请求。
如果所有这些请求都直接来自该其他服务器,那么您也许可以允许来自该服务器的所有请求 - 由服务器的 IP 地址标识。
例如,如果 203.0.113.111
是您服务器的 IP 地址,则:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !=203.0.113.111
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?:///
RewriteRule \.(gif|jpg|jpeg|png|tif|pdf|wav|wmv|wma|avi|mov|mp4|m4v|mp3|zip?)$ - [F]
我在我的 .htaccess
文件中使用了这段代码,它可以很好地防止盗链:
RewriteEngine On
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?:///.*
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
.
我应该如何在此代码中将我的子域添加为例外?
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?:///.*
使用以下 条件 来允许可选的 cdn
子域:
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://(cdn\.)?/
(不需要结尾的 .*
。)
更新#1:
It is not possible to add http_reffer to my GET request!
不确定您的意思,但是如果 Referer
header 由于某种原因没有与这些请求一起发送(也许您有限制性的 Referrer-Policy?)那么您可能需要允许 empty referer.
要允许 empty Referer
,请添加以下内容作为第一个 条件:
RewriteCond %{HTTP_REFERER} !^$
:
但是,这也将允许 直接 请求。但是由于 Referer
header 的不可靠性质,您确实需要允许 empty Referer
header 无论如何,因为一些合法用户可能会抑制它。
旁白: 这些防止盗链的指令也会阻止搜索引擎 - 如果这是一个问题?
更新#2:
i have another server for cdn.mydomain.com . and on that server i have a php script that will convert images to specific format . i should allow this script to read images from main domain
:
i can't edit that php script to change request method
理想情况下,脚本将发送一个自定义 HTTP 请求 header,表明该请求来自您的“CDN”。然后您可以在上面的指令中检查是否允许该请求。
如果所有这些请求都直接来自该其他服务器,那么您也许可以允许来自该服务器的所有请求 - 由服务器的 IP 地址标识。
例如,如果 203.0.113.111
是您服务器的 IP 地址,则:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !=203.0.113.111
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?:///
RewriteRule \.(gif|jpg|jpeg|png|tif|pdf|wav|wmv|wma|avi|mov|mp4|m4v|mp3|zip?)$ - [F]