我有一个Apache和/或PHP的一个奇怪的问题,这是让我疯了。 在我解释这个问题之前,我已经了解了关于环境的一切。
OS: Ubuntu SMP x84_64 Apache Version: 2.x PHP Version: 4.4.9-nmm4
这是一个共享的托pipe计划,所以我没有访问一个shell。
如果Apache / PHP被网站本身引用( <img src="..." />
),它不会显示任何图片。 所有图像请求返回403“禁止”。 但是,如果您复制所请求的图像的path并直接浏览图像显示。 没有问题。
所以我可以得出结论,图像是可以访问的Apache。 我使用.htaccess文件:
# BEGIN s9y DirectoryIndex /index.php <Files *.tpl.php> deny from all </Files> <Files *.tpl> deny from all </Files> <Files *.sql> deny from all </Files> <Files *.inc.php> deny from all </Files> <Files *.db> deny from all </Files> # END s9y AddHandler php4-cgi .php
正如你所看到的关于图像的东西。 没有重写规则或类似的东西。
到目前为止,我GOOGLE了很多,发现一些提示,build议将指令EnableSendfile
和EnableMMAP
为closures可以帮助。 我试过但没有发生。 我的猜测是,我将不得不重新启动Apache才能生效。 但正如我刚才所说,这是一个共同的托pipe计划。 我无法重新启动Apache。
我希望有一个人可以帮助我 :)
我的问题的解决scheme非常简单。 这两个答案都表明问题在于热链接保护。 奇怪的是,保护是在另一个项目在另一个域的同一帐户。 我从.htaccess文件中删除了热链接保护,现在它再次工作。
特别感谢伊戈尔。 他和我用irc解决了这个问题。 这就是为什么我把他的答案标记为我的问题的正确答案。
从IRC重复我的问题:错误日志究竟说的是什么?
那么,呃。 – 没有提供错误日志,我用我的魔力来debugging这个问题(歌剧的蜻蜓)。 我注意到,这真的是完全一致的。
每个图像将403,除非直接调用。
我试图在命令行上重新生成,并设法这样做:
igalic@resix:~$ curl -H"Referer: http://www.example.org/" -i http://www.example.org/foobar.jpg HTTP/1.1 403 Forbidden
从这个我得出结论,有一些热链接保护显然使用错误的URL作为引用。
你的错误的描述使我认为你有不正确的configuration引用匹配。 添加引用匹配以防止盗链降低带宽成本并不罕见。 通常允许空引用者,当然,你的网站应该被允许。 所有其他人通常被拒绝。
看起来应该匹配您的网站的正则expression式不匹配您的网站。 当你没有引用者提出相同的请求时,它就起作用了。
看到你在共享主机,并没有shell访问,你可能不得不问你的提供商这一点。 询问他们是否有任何热链接保护,如果他们有,请让他们检查它是否正常工作。
如果你想排除你的.htaccess文件存在问题的可能性,请尝试删除它或注释掉它的一部分,看看你的图像是否工作。 如果他们仍然没有那么.htaccess文件不是问题。