.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
应该是最后一个。
这可能是一个简单的解决方案,但我有一个托管帐户和一个与其关联的主域。我在同一个帐户上还有其他域 '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
应该是最后一个。