Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的标头覆盖HTTP响应代码_Php_Apache_Http_Http Headers - Fatal编程技术网

PHP中的标头覆盖HTTP响应代码

PHP中的标头覆盖HTTP响应代码,php,apache,http,http-headers,Php,Apache,Http,Http Headers,在Apache级别设置规则时,发现php中的头('Location:filename.php')覆盖了响应代码。请看下面的代码:- <?php header('HTTP/1.1 308 Permanent Redirect'); //or Try for 4xx/5xx Code header('Location: http://hello.php'); ?> 预期结果 HTTP/1.1 308永久重定向 主机:localhost:8000 位置:hello.php 连接:关

在Apache级别设置规则时,发现php中的头('Location:filename.php')覆盖了响应代码。请看下面的代码:-

<?php
header('HTTP/1.1 308 Permanent Redirect'); //or Try for 4xx/5xx Code
header('Location: http://hello.php');
?>

预期结果

  • HTTP/1.1 308永久重定向
  • 主机:localhost:8000
  • 位置:hello.php
  • 连接:关闭
  • X-Powered-By:PHP/5.5.6
实际结果

  • 找到HTTP/1.1
    302
  • 主机:localhost:8000
  • 位置:hello.php
  • 连接:关闭
  • X-Powered-By:PHP/5.5.6
Apache级别有什么问题吗?PHP中有什么错误吗

更新:

因为这是PHP发送位置头时所需的行为

编辑:对不起,误读了你的信息。如果您发送的代码不同于3xx,它将覆盖响应代码,因此它应该与308一起工作。 您确定没有其他HTTP代码被发回吗?您的客户机是否尝试检索新资源,您是否看到302作为最终结果

最终编辑:你试过了吗

header('Location: /some/page.php', TRUE, 308);
如中所述,标题的“位置”类型有一个特殊情况。它设置302响应代码,除非已经设置了201或3xx状态代码。不幸的是,它并不像您在示例中看到的那样有效

我已经使用了代码,当您更改操作顺序时,它似乎可以工作,如下所示:

<?php
header('Location: landing.php');
header('HTTP/1.1 308 Permanent Redirect');
?> 
不更改3**的响应代码,308除外。所以如果你这样做了

<?php
header('HTTP/1.1 307 Temporary Redirect');
header('Location: landing.php');
?> 

上述代码将按预期正常工作。 所以你很幸运能在规则中找到例外。而我的变通方法可以解决这个问题。
PS:使用PHP5.4.27,我认为两者都不是。您在哪里查找标题结果。我没有收到任何警告。我在Firebug和HTTPFox(插件)中都看到了结果。@CodeCaster可能是重复的,而不是重复的兄弟。在308300中,它会将头覆盖到302,甚至覆盖任何4.x.x和5.x.x。它完全相同,不管您希望返回的状态码是什么。阅读问题并接受答案.header('Location:/some/page.php',TRUE,308);在PHP5.5.9中运行良好
<?php
header('HTTP/1.1 307 Temporary Redirect');
header('Location: landing.php');
?>