我们尝试添加以下热链接保护以节省带宽。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^https://(www.)?domain [NC]
RewriteCond %{HTTP_REFERER} !^https://(www.)?domain.*$ [NC]
RewriteRule .(gif|GIF|jpg|JPG|PNG|png|jpeg|JPEG|mp4|MP4|mkv|MKV|webm|WEBM|ico|ICO)$ - [F]
这工作得很好。现在,我们希望排除 URL admin/thumbs (domain.tld/admin/thumbs/image.jpg) 的热链接保护,应从热链接保护中排除。
我们尝试添加以下代码,但它不起作用。我们搜索了stackoverflow和多个论坛,但没有一个帮助我们。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^https://(www.)?domain [NC]
RewriteCond %{HTTP_REFERER} !^https://(www.)?domain.*$ [NC]
RewriteCond %{REQUEST_URI} !/admin/thumbs$
RewriteRule .(gif|GIF|jpg|JPG|PNG|png|jpeg|JPEG|mp4|MP4|mkv|MKV|webm|WEBM|ico|ICO)$ - [F]
任何帮助将不胜感激。
RewriteCond %{REQUEST_URI} !/admin/thumbs$
这会为任何以/admin/thumbs
结尾的 URL 创建一个例外,而您似乎想为/admin/thumbs
子中的任何文件创建一个例外,即。 任何以/admin/thumbs
开头的 URL。
注释中!^admin/thumbs/?
的建议不正确,因为REQUEST_URI
服务器变量始终以斜杠开头,因此条件将始终成功,并且请求可能会被阻止。
您应该使用CondPattern!^/admin/thumbs($|/)
来排除对/admin/thumbs
、/admin/thumbs/
和/admin/thumbs/<anything>
的请求,而不是/admin/thumbsomething
请求。例如:
RewriteCond %{REQUEST_URI} !^/admin/thumbs($|/)
您现有的规则可以进一步简化/完善,因为检查HTTP_REFERER
的现有条件是"相同的",但也匹配太多。混合大小写RewriteRule
模式可以通过使用NC
(nocase
) 标志来展平。
例如,完整的规则将变为:
# Hotlink protection for images, except those in "/admin/thumbs/..."
RewriteCond %{HTTP_REFERER} !^https://(www.)?example.com($|/) [NC]
RewriteCond %{REQUEST_URI} !^/admin/thumbs($|/)
RewriteRule .(gif|jpg|png|jpeg|mp4|mkv|webm|ico)$ - [NC,F]
请注意,这还会阻止空的Referer
标头。这包括直接请求(直接在浏览器的地址栏中键入 URL 的任何人)和在其浏览器中禁止Referer
的任何用户(某些用户这样做是为了增加隐私)。
带有附加.htaccess
文件的替代解决方案
或者,您可以在/admin/thumbs/
子目录中创建一个附加.htaccess
,然后简单地禁用重写引擎。例如:
RewriteEngine Off
这将覆盖并防止在请求此子目录中的任何内容时处理父配置中的热链接保护指令。