php重定向失败,不做任何事情

时间:2011-06-25 09:11:17

标签: php header

我只有一个带有这行代码的简单php文件。

  <?php header("Location: MyBooks.php", true); exit();?>

表单1将表单提交到这个简单的php文件,该文件应该重定向到同一目录中的MyBooks.php。

我只是不明白,为什么它没有重定向?

没有报告错误。

6 个答案:

答案 0 :(得分:4)

您可能已经通过脚本发送了一些输出(可能只是空格),在这种情况下,您无法再发送标题。

使用以下代码进行测试:

if (headers_sent()) {
    die("Error: headers already sent!");
}
else {
    header("Location: MyBooks.php", true);
    exit();
}

如果这会打印错误,那么您需要确保在header调用之前根本没有输出。检查:

  • echo来电之前,您没有header任何内容(或以其他方式输出任何HTML)
  • 在PHP脚本中<?php开始标记或?>结束标记(如果存在)之前绝对没有空格

更新:如何使用Chrome检查HTTP标头

How to check HTTP headers using Chrome

  1. 选择网络标签
  2. 从控制台上方的菜单中选择文档以缩小右侧列表
  3. 从右侧列表(此处为http://localhost/
  4. 中选择过滤器匹配的唯一资源
  5. 单击“标题”选项卡

答案 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();
    }
?>