.htaccess - hotlink Prevention不适用于其他托管域

时间:2018-04-03 14:12:18

标签: html .htaccess mod-rewrite http-referer hotlinking

这可能是一个简单的解决方案,但我有一个托管帐户和一个与之关联的主域。我还有其他域名'子托管'在同一个帐户上。我在文档根目录设置了hotlink预防。但是,它仅适用于主域。子托管域继续允许热链接。

以下是我正在使用的代码。可能需要进行哪些修改才能防止同一主机上其他域的热链接?感谢

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?PRIMARY-DOMAIN.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?SUB-HOST1.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?SUB-HOST2.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?SUB-HOST3.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://www.PRIMARY-DOMAIN.com/Images/Hotlink/hotlink.gif [NC,R,L]
RewriteCond %{REQUEST_URI} !^/Images/Hotlink/

1 个答案:

答案 0 :(得分:1)

  

在文档根目录中,子域指向具有相同名称的文件夹。

如果这些子目录也有自己的.htaccess文件,其中包含mod_rewrite指令,那么(默认情况下)这些指令将完全覆盖父.htaccess文件(在主域中)中的mod_rewrite指令。所以,你的" hotlinking"指令永远不会得到处理。

您需要启用mod_rewrite继承。但是,如果您在父.htaccess文件中有其他指令,则可能会出现警告。并取决于你是否有Apache 2.2或2.4 +

例如,在Apache 2.4上,您可以在父.htaccess文件中包含以下指令来处理" hotlinking"指令之前子域.htaccess文件中的指令:

RewriteOptions InheritDownBefore

但请注意,这可能会破坏您的网站,具体取决于您在.htaccess文件中的其他指令。 mod_rewrite继承通过字面复制指令来实现 - 如果你依赖于目录前缀,这可能是一个问题。

或者,您可以在每个子目录/子域的.htaccess个文件中重现这些热链接指令。

RewriteRule \.(jpg|jpeg|png|gif)$ http://www.PRIMARY-DOMAIN.com/Images/Hotlink/hotlink.gif [NC,R,L]
RewriteCond %{REQUEST_URI} !^/Images/Hotlink/

这些指令是错误的方式。 RewriteRule应该是最后一次。

相关问题