PHP中的标头覆盖HTTP响应代码
在Apache级别设置规则时,发现php中的头('Location:filename.php')覆盖了响应代码。请看下面的代码:-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 连接:关
<?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
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');
?>