我只有一个带有这行代码的简单php文件。
<?php header("Location: MyBooks.php", true); exit();?>
表单1将表单提交到这个简单的php文件,该文件应该重定向到同一目录中的MyBooks.php。
我只是不明白,为什么它没有重定向?
没有报告错误。
答案 0 :(得分:4)
您可能已经通过脚本发送了一些输出(可能只是空格),在这种情况下,您无法再发送标题。
使用以下代码进行测试:
if (headers_sent()) {
die("Error: headers already sent!");
}
else {
header("Location: MyBooks.php", true);
exit();
}
如果这会打印错误,那么您需要确保在header
调用之前根本没有输出。检查:
echo
来电之前,您没有header
任何内容(或以其他方式输出任何HTML)<?php
开始标记或?>
结束标记(如果存在)之前绝对没有空格更新:如何使用Chrome检查HTTP标头
http://localhost/
)答案 1 :(得分:4)
似乎是您正在运行的服务器中的问题:http://social.msdn.microsoft.com/Forums/expression/en-US/db37d2ea-65ef-40ad-8a25-62a846a5d00d/php-headers-and-redirect
因此,您必须在发送位置标头之前手动将响应代码指定为 302 :
header('HTTP/1.0 302 Found');
header('Location: http://localhost/MyBooks.php');
exit;
请记住在Location
中使用绝对网址。
答案 2 :(得分:3)
我能做到的唯一方法是:
$url = "http://www.google.com";
echo "<script>window.open('".$url."','_self');</script>";
此致
答案 3 :(得分:2)
您还可以将两个标题调用合并到:
header('Location: http://localhost/MyBooks.php', true, 302);
exit;
因此您无需记住HTTP状态代码的格式/描述。 header函数的签名是
void 标题(字符串$ string [,bool $ replace = true [,int $ http_response_code]])
答案 4 :(得分:0)
我觉得这段代码没问题 检查执行是否来这行,
尝试不带布尔值
<?php header("Location: MyBooks.php); exit();?>
答案 5 :(得分:0)
我遇到了这个问题,原因是在脚本结束之前在标题中设置了多个位置。
<?php
// WARNING: BAD CODE
if($thisShouldBeTrue) {
header('Location: http://www.example.com');
}
if($weShouldNeverGetHere) {
header('Location: http://www.otherexample.com');
}
?>
我认为php会在第一个标题处立即重定向,并且永远不会到达第二个if块。我错了。如果你的目的是立即去那里,总是死()或在重定向后退出。
<?php
// CORRECT
if($thisMightBeTrue) {
header('Location: http://www.example.com');
die();
}
if($orThisMightBeTrue) {
header('Location: http://www.otherexample.com');
die();
}
?>