在我的所有 Apache 服务器中我都使用了热链接保护,因为我不希望有人利用我的服务器带宽将我的图像/flash 粘贴到他们的网站中。
为了使热链接保护起作用,在我的 Apache .htaccess 中我只需使用以下命令:
#Hotlink protection (only for www.domain.it cause http://domain.it is being redirected)
RewriteCond %{HTTP_REFERER} !^http://www.domain.it/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.domain.it$ [NC]
RewriteRule .*\.(wav|swf|jpg|jpeg|gif|png|bmp|js)$ - [F,NC]
这很有效,但我最近发现,当我要求http://www.domain.com/somepage.htm/
(最后以斜线结尾)似乎触发了热链接保护,服务器停止页面下载.(wav|swf|jpg|jpeg|gif|png|bmp|js)
文件
您知道如何在 .htaccess 中修复这个问题吗?
在今天之前,我甚至认为如果我输入 URL(带斜杠),服务器应该会返回错误http://www.domain.com/somepage.htm/
。但我发现这是正常的,因为如果你寻找http://www.php.net/docs.php它返回的是同一页http://www.php.net/docs.php/(最后一个斜线)。这是为什么呢?你能给我解释一下吗?!
谢谢
答案1
你确定这是防盗链吗?如果你的网站布局如下:
/somepage.htm
/images/a.jpg
然后,如果 somepage.htm 具有图像的相对路径,例如,<img src="images/a.jpg">
并且您转到http://example.com/somepage.htm/
,那么您的 Web 浏览器将认为它位于“somepage.htm”目录中,并尝试加载图像http://example.com/somepage.htm/images/a.jpg
。如果您转到那里,Apache 可能会向您发送 somepage.htm 的另一个副本,这将导致您的浏览器显示损坏的图像。
我不确定 Apache 是否有关闭此功能的设置。对于纯 HTML 文件来说,这没什么意义,但 Apache(和其他服务器)允许这样做的原因是,对于使用“漂亮 URL”(如 serverfault 的 URL!)的网站,URL 超出了实际文件的范围。serverfault 上没有名为“urls-with-final-slash-trigger-hotlink-protection-on-my-server”的文件,它只是供人们(和 Google)阅读。您可以使用以下方式加载此问题带有斜杠的 URL 会触发我的服务器上的热链接保护
虽然我不知道 serverfault 是如何产生的(有很多方法可以做到这一点),但几乎可以肯定也没有名为“197935”的文件。但可能有一个名为“questions”的脚本,服务器可以运行该脚本,该脚本将看到整个 URL,在数据库中查找该号码,然后创建此页面。