.htaccess - 热链接预防不适用于其他托管域

.htaccess - hotlink prevention not working for other hosted domains

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

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

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/

In the document root, the subdomains point to folders with the same name.

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

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

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

RewriteOptions InheritDownBefore

但请注意,这可能会破坏您的网站,具体取决于您在 .htaccess 文件中的其他指令。 mod_rewrite 继承通过字面上复制指令 in-place 来工作 - 如果您依赖 directory-prefix.

这可能是个问题

或者,您在每个 subdirectory/subdomain.

.htaccess 文件中复制这些热链接指令
RewriteRule \.(jpg|jpeg|png|gif)$ http://www.PRIMARY-DOMAIN.com/Images/Hotlink/hotlink.gif [NC,R,L]
RewriteCond %{REQUEST_URI} !^/Images/Hotlink/

这些指令是错误的。 RewriteRule 应该是最后一个。