2011-09-16 37 views
3

在我的本地开发机器上,我下载了运行在Windows 7上的包含Apache 2.2.16和PHP 5.3.5的PDT + Zend Server。在本地站点上,我包含了一个.htaccess,其中包含404,403和403的ErrorDocuments。和500.在我的PHP中,当用户请求一个不存在的文档时,我使用头(“Http/1.0 404 Not Found”)。在我的本地服务器上,一切都很好。我的自定义ErrorDocument出现,我很高兴。从PHP返回Http状态代码到Apache?

我把所有东西上传到我在Linux服务器上运行Apache 2.2.38和PHP 5.3.8的共享主机上,并且突然间ErrorDocuments只有在它们不是来自PHP。

在PHP.ini或httpd.conf或.htaccess中是否有一些设置允许Apace从PHP中查看错误代码,这使得我的dev服务器正常工作,但不是我的共享主机?

在研究这件事时,我所看到的只是“Apache一旦传递给PHP就看不到状态码。”在这种情况下,为什么我的开发服务器正常工作?

编辑

为了清楚起见,这里的的.htaccess:

# Use PHP 5.3 
Action application/x-hg-php53 /cgi-sys/php53 
AddHandler application/x-hg-php53 .php 

#Deny Include Files 
<Files *.inc> 
order deny,allow 
deny from all 
</files> 

#Provide custom error documents 
ErrorDocument 404 /Errors/Http404.php 
ErrorDocument 403 /Errors/Http403.php 
ErrorDocument 500 /Errors/Http500.php 

,因为如果用户导航到myhost.com/jdkslfjdls用户收到错误的内容工作的的.htaccess /Http404.php。

但是,如果用户导航到myhost.com/images/GetImage.php?Id=5(当没有图像#5时),则用户不会收到任何内容。

如果他们导航到(内部IP地址)/images/GetImage.php?Id=5,用户将收到错误/ Http404.php的内容。

如果用户尝试访问GetImage.php?Id = 6(当存在图像#6但他们没有权限时),则会出现类似问题。在共享服务器上,他们得到一个空白页或浏览器的403错误。在我的开发服务器上,他们得到我实际的自定义403错误页面。

再次,如果我尝试访问.inc文件,403错误文档在共享服务器上工作。

+0

自定义错误文档位于何处?它需要通过Linux服务器可达,所以如果它只在你的Windows服务器上,那么它为什么不显示它 – thegaffney

+0

它显示当我尝试导航到一个不存在的文件,例如http://myhost.com/ hfjdshfkdsh。它只会在我使用php的头文件时失败。 –

+0

你在哪里放头(“Http/1.0 404 Not Found”)?在一个存在但你想要它抛出一个404代码的文件? – thegaffney

回答

0

您确定服务器上使用了.htaccess文件吗?有时托管公司不允许全局apache设置被本地.htaccess文件覆盖。

不过,若你有机会获得你的虚拟主机配置比你可能想看看下面的指令

AllowOverride All 

相反,如果你发现

AllowOverride None 

尝试如上改变。

+0

.htaccess正在使用中,因为如果我导航到myhost.com/fkjdshfkds,我会得到正确的自定义404文档。当我尝试使用PHP头文件(“Http/1.0 404 Not Found”)或其他状态代码时,这只是一个问题,它可以在我的Windows服务器上运行,但不在共享主机上运行。 –

+0

你可以做一个快速的黑客从PHP重定向到一个不存在的页面并获取文档? :P我知道这不能提供解决方案,但如果您真的需要它并运行它可能会帮助你一段时间。 –

+0

我目前的攻击是为了避免出现一个错误图像,上面写着“您需要权限”或“图像未找到”。但是,使用标题重定向是个好主意。 –

0

检查,如果你在你的Apache有

AllowOverride ALL 

。在虚拟主机里面对应到您的网站

反正Directory指令,这可能是一个可能的原因conf下,其他的可能是检查你是否已经启用了mod_rewrite

在Ubuntu或基于Debian的系统,你'd只需将/etc/apache2/mods-available/mod_rewrite.load中的mod_rewrite.load链接或复制到/etc/apache2/mods-enabled/mod_rewrite.load

虽然重写应该没有任何关系,但我已经看到你的.htaccess指令可能需要mod_rewrite

所以检查那些在Apache配置文件中的东西。 如果没有发生任何事情联系我@ [email protected]

希望它的作品。

+0

我现在用“RewriteEngine On”试过了,但没有改变。 –