Apache 热链接保护,正确。htaccess规则?

Apache 热链接保护,正确。htaccess规则?,apache,.htaccess,mod-rewrite,hotlinking,Apache,.htaccess,Mod Rewrite,Hotlinking,我在上看到了,也在这里看到了许多答案,因此人们可以使用以下代码进行热链接保护: RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com [NC] RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L] 这也是作者的建议 我可能错了,但是欺骗这段代码不是很简单吗?刮板机难道不需要简单地使用这些子域来

我在上看到了,也在这里看到了许多答案,因此人们可以使用以下代码进行热链接保护:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
这也是作者的建议

我可能错了,但是欺骗这段代码不是很简单吗?刮板机难道不需要简单地使用这些子域来绕过热链接保护吗?

http://mydomain.com.scarper1domain.com
http://mydomain.com.scraper2domain.net

编辑:仅供参考,我使用这段代码,我认为它更加防弹,但我很高兴阅读您的评论/批评

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain\.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain\.com$ [NC]
RewriteRule .*\.(jpg|jpeg|png|gif)$ - [F,NC,L]

由于大多数apache设置已经将example.com之类的请求重定向到example.com/,因此在编辑中不需要第三个条件。因此,代码将成为

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain\.com/.*$ [NC]
RewriteRule .*\.(jpg|jpeg|png|gif)$ - [F,NC,L]
scraper甚至不需要使用子域,因为它们可以伪造正在发送的http头。没有办法防止这种情况


代码的其余部分没有问题。如果我需要的话,我会用这个

你粘贴的代码后面有什么东西吗?如果没有,那么它可以被绕过,因为只有在所有其他请求都被重写之后,该规则才会通过热链接进行保护。@piotrekkr:我并不真正理解你的意思,但这可能是一个值得研究的问题。你能再解释一下吗?无论如何,这并不是问题的主题。我的意思是,即使您是正确的,问题中显示的两段代码都会出现问题。由于大多数apache设置已经将请求(如
example.com
重定向到
example.com/
),因此在编辑中不需要第三个条件。scraper甚至不需要使用子域,因为它们可以伪造正在发送的http头。没有办法防止这种情况。代码的其余部分没有问题。如果我需要,我会使用它。我的意思是,如果你捕获了所有dns记录,比如
*。example.com
,即使不存在子域也会被捕获。因此,如果您知道映像位于
example.com/image.jpg
,并且受.htaccess保护,则可以使用address
notexisting.example.com/image.jpg
@piotrekkr:
notexisting.example.com
跳过我问题中显示的.htaccess,因为它们都需要URL启动(请参阅
^
)对于
www.mydomain.com
mydomain.com
,我不同意这样的说法:“因为大多数apache设置已经将example.com之类的请求重定向到example.com/,所以在编辑中不需要第三个条件”无论如何,这是最合理的答案。@MarcoDemaio大多数设置都启用了mod_dir。此外,大多数现代浏览器已经自动添加尾部斜杠。但是如果您的服务器没有mod_dir,您可以使用
^http(s)?:/(www\)?mydomain\.com(/.*)$
取而代之:-)