PHP:404标头在HTTPS站点上不起作用 - 返回空白页而不是默认未找到页面

时间:2012-10-08 11:28:33

标签: php ssl https http-status-code-404

我有一个通配符证书,我们称之为* .example.com,我在Apache中为* .example.com设置虚拟主机(对于HTTPS和非HTTPS流量)。< / p>

一直在处理404响应标题,但我似乎遇到了问题,所以我做了一个简单的测试用例:

在virtaul主机中,我将所有流量重写为index.php:

RewriteRule .* /index.php [QSA]

index.php中,我返回404标题:

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
exit();

除此之外我别做其他事情,所以没有ErrorDocument设置或类似。

服务器(用户file_get_contents("https://test.example.com");print_r($http_response_header);从另一个PHP文件返回的标头转储:

Array
(
    [0] => HTTP/1.0 404 Not Found
    [1] => Date: Mon, 08 Oct 2012 12:41:28 GMT
    [2] => Server: Apache/2.2.16 (Debian)
    [3] => X-Powered-By: PHP/5.3.3-7+squeeze14
    [4] => Vary: Accept-Encoding
    [5] => Content-Length: 57
    [6] => Connection: close
    [7] => Content-Type: text/html
)

如果我然后在任何子域/任何路径上输入HTTP站点,浏览器将正确显示默认未找到的页面,但如果我使用HTTPS,则浏览器将显示空白页面(除非在IE中正确显示(?)显示未找到的页面。)

header("Status: 404 Not Found");也不起作用。

这不是正确的吗?我在这里缺少一些东西 - 404标头和通配符证书的某些限制可能吗?

根据Hakre的要求更新

headers_list()转发的标头:

Array
(
    [0] => X-Powered-By: PHP/5.3.3-7+squeeze14
)

似乎服务器完全忽略了添加我的404标头,无论使用以下任何一种方式编写标头:

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");

header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");等其他标题可以正常使用。

1 个答案:

答案 0 :(得分:0)

这是错误的:

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");

即使您使用的是HTTPS,也应该返回:

header("HTTP/1.1 404 Not Found");