Apache / PHP不显示图像

我有一个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议将指令EnableSendfileEnableMMAPclosures可以帮助。 我试过但没有发生。 我的猜测是,我将不得不重新启动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文件不是问题。