redirect - php 位置标头重定向即使在输出开始后仍然有效
问题描述
header('location:..
如果您已经发送了一些输出,我认为您无法在 php 中使用重定向。但是,此测试程序在本地服务器上的工作方式与(未)预期的一样。
$ 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 时得到的错误?
解决方案
我试过你的脚本,对我来说它报告了预期的“无法修改标题”警告,只显示“你好”。
对您来说可能不同的主要事情是output_buffering
php.ini 中的变量 - 如果没有禁用它,那么它会自动将输出缓冲到一定大小。因此,请检查它是否设置为“开”或类似 4096。默认值是否为关,但有很多示例配置启用它。
推荐阅读
- javascript - 出现错误说找不到模块'../util/http_util'
- regex - PowerShell Lookbehind 的 RegeX 代码在 IP 寻址上不匹配
- c++ - 用c ++输入记录的一个字段时如何搜索记录
- git - 是否可以触发另一个提交并通过 git hook 推送?
- openedx - CMS sign in redirect to lms login page in open edx
- vuejs2 - 如何使用 xiaokaike/vue-color 组件修复 VueColor 未定义错误
- kubernetes - 有没有在没有 Helm 的情况下在 Kubernetes 集群中部署 Istio 的解决方案
- google-bigquery - BigQuery Slot Usage and Billing across Projects
- javascript - 如何解决 Asyncstorage 多集不存储任何数据?
- makefile - makefile doesn't build targets