【问题标题】:How can I send a user to another url without a header redirect?如何在没有标头重定向的情况下将用户发送到另一个 url?
【发布时间】:2011-12-06 11:32:25
【问题描述】:

我正在学习 PHP,并且一直在寻找这个。我想要实现的是这样的:

if (true/false) {
    go to this url;
}

每次我搜索 php 重定向或 php 链接等术语时,99% 的时间我都会得到一些“标题”。我读到标题重定向可以实现这一点,但没有代码可以在它之前,它必须是页面上的第一个,否则它将不起作用。

如果是这样,那我该如何实现呢?

【问题讨论】:

  • 在进行标头重定向之前你不能有任何输出,但它们通常是要走的路。在输出任何 HTML 之前考虑如何进行真/假检查通常比尝试找到一种在呈现过程中重定向到页面的方法更好
  • 如果您已经输出了一些东西,您可以使用 JavaScript 的 document.location="url"; 或已弃用的元刷新标签:secure.wikimedia.org/wikipedia/en/wiki/Meta_refresh
  • 谢谢各位。我会接受你的建议 pekka 并把它放在 b4 任何呈现...我检查表单中的某些值与 db 上的某些值,这样就可以了。谢谢。

标签: php redirect


【解决方案1】:

如果您在重定向之前需要一些输出,可以使用它:

header("refresh: $time_in_seconds; url=$your_url);

但是,您仍然必须在实际发送输出之前调用它。发送标题,然后发送您的输出 - 页面将在指定的时间内“重定向”。

免责声明:我必须承认,我不确定这意味着什么,也找不到关于它的文档,所以我不一定推荐它 - 但我可以验证它有效。

【讨论】:

    【解决方案2】:
    echo '<script type="text/javascript"> document.location = "http://yoururl.com";</script>'
    

    这将在执行这部分脚本时执行。

    【讨论】:

    • 我投了赞成票,因为您给出的答案不是标题(就像他在问题中提到的那样),但我不知道我应该这样做,因为我觉得他真正需要的是有人来解释输出缓冲区:P
    【解决方案3】:

    我读到标头重定向可以实现这一点,但没有代码可以在它之前进行。它必须在页面上的第一个,否则它将不起作用。

    错了。在此之前必须没有输出。因此,您必须确保之前没有 echoprint?&gt;something&lt;?php(或其他任何东西)。

    if (true)  {
      header('Location: ' . $url, false, 302);
      exit; // Ensures, that there is no code _after_ the redirect executed
    }
    

    你可以准备好一切about it in the official manual。特别是:

    请记住,header() 必须在发送任何实际输出之前调用,无论是通过普通 HTML 标记、文件中的空白行还是通过 PHP。使用 include() 或 require()、函数或其他文件访问函数读取代码并在调用 header() 之前输出空格或空行是一个非常常见的错误。使用单个 PHP/HTML 文件时也存在同样的问题。

    【讨论】:

    • 即使您认为可以,如果您担心,也可以使用output buffering
    • 啊,好吧,我明白了。我误解了“输出”部分 lmao。感谢那!。也谢谢布拉德。
    猜你喜欢
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2010-11-18
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多