如果您已经发送了一些输出,我认为您无法在php中使用header('location:..
进行重定向。但是,此测试程序与本地服务器一样(非)预期。
$ cat > index.php
Hello,
<?php
if ($_SERVER['REQUEST_URI'] !== "/") {
header('location: /');
die();
}
?>
World!
然后我像这样启动php本地服务器
$ php -S localhost:8000
然后当我转到http://localhost:8000/index.php?test=1
时,它会将我重定向到http://localhost:8000
。
为什么不抱怨我已经发送了输出?这是关于PHP 7的不同之处吗?现代浏览器有什么不同?关于演示服务器的一些不同之处?或者我是否需要做一些稍微不同的事情以获得我上次使用php时出现的错误?
答案 0 :(得分:1)
我尝试了你的脚本,对我来说它报告了预期的&#34;无法修改标题&#34;警告并且只显示&#34;您好,&#34;。
对你来说可能有所不同的是你的php.ini中的output_buffering
变量 - 如果它没有被禁用,那么它会自动将输出缓冲到一定的大小。因此,检查它是否设置为&#34; On&#34;或类似于4096.默认值为Off,但有很多样本配置启用它。