从PHP返回Http状态代码到Apache?

时间:2011-09-16 15:53:15

标签: php apache http http-status-codes errordocument

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

我将所有内容上传到我在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

.htaccess 有效,因为如果用户导航到myhost.com/jdkslfjdls,则用户会收到错误/ 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错误文档再次在共享服务器上运行。

2 个答案:

答案 0 :(得分:0)

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

但是,如果您有权访问虚拟主机配置,则可能需要查看以下指令

AllowOverride All

如果您找到了

AllowOverride None

尝试按上述方式进行更改。

答案 1 :(得分:0)

检查您是否

AllowOverride ALL

在您的网站

对应的VirtualHost内的Directory指令下的apache.conf中

无论如何,这可能是一个可能的原因,另一个可能是检查你是否启用了mod_rewrite

在基于ubuntu或debian的系统上,您只需将/etc/apache2/mods-available/mod_rewrite.load中的mod_rewrite.load链接或复制到/etc/apache2/mods-enabled/mod_rewrite.load

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

因此请检查apache conf文件中的那些内容。 如果没有任何反应,请联系我@ phpcip@gmail.com

希望它有效。