【问题标题】:PHP page redirect [duplicate]PHP页面重定向[重复]
【发布时间】:2011-01-07 21:58:30
【问题描述】:

PHP 可以在执行函数后进行重定向调用吗?我正在创建一个函数,完成后我希望它重定向到位于同一根文件夹中的文件。可以吗?

if (...) {
    // I am using echo here.
} else if ($_SESSION['qnum'] > 10) { 
    session_destroy();
    echo "Some error occured.";
    // Redirect to "user.php".
}

【问题讨论】:

标签: php redirect header


【解决方案1】:

是的,您将使用header 函数。

/* Redirect browser */
header("Location: http://www.yourwebsite.com/user.php"); 
exit();

最好在它之后立即调用exit(),这样它下面的代码就不会被执行。

另外,来自文档:

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

这意味着您不应该在 header() 函数之前回显任何内容,因为这样做很可能会引发错误。此外,您还需要验证此代码是否在任何其他输出之前运行。

【讨论】:

  • 您还应该将 HTTP 状态设置为 302。
  • "第二种特殊情况是“Location:”标头。它不仅将此标头发送回浏览器,而且还会向浏览器返回一个REDIRECT(302)状态码,除非201或者已经设置了 3xx 状态码。”
  • 我被“后记”所困扰。
  • 使用die而不是exit来防止只退出函数。
【解决方案2】:

使用 javascript 作为故障保护将确保用户被重定向(即使标头已经发送)。给你:

// $url should be an absolute url
function redirect($url){
    if (headers_sent()){
      die('<script type="text/javascript">window.location=\''.$url.'\';</script‌​>');
    }else{
      header('Location: ' . $url);
      die();
    }    
}

如果您需要正确处理相对路径,我已经为此编写了一个函数(但这超出了问题的范围)。

【讨论】:

  • 描述性如何。
  • 将此行更改为此,它将... die('&lt;script type="text/javascript"&gt;window.location=\''.$url.'\';&lt;/script&gt;');
  • Gabe 修复的上述功能有效!
  • 没问题,除非用户禁用了 JS。
  • 在这种情况下,您可以使用元重定向 die('&lt;meta http-equiv="refresh" content="0; url=' . $url . '" /&gt;');
【解决方案3】:

简单的方法是使用:

  echo '<script>window.location.href = "the-target-page.php";</script>';

【讨论】:

    【解决方案4】:
       $url='the/url/you/want/to/go';
       echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$url.'">';
    

    这对我来说很好。

    【讨论】:

    • 这也适用于我。谢谢
    • 也为我工作
    • 是的,这对我来说是救命稻草;我从标题中动态填充页面标题和正文 ID,因此无论如何,我总是会发送标题。对我来说,这只是一个网络表单机器人响应。不错,谢谢。
    • 这对我也有用。 :) 不知道为什么这不在顶部。 :(
    • 这对我也有用。谢谢。
    【解决方案5】:
    header( "Location: http://www.domain.com/user.php" );
    

    但你不能先回显,然后重定向。

    【讨论】:

      【解决方案6】:

      正如 nixxx 所提到的,在添加任何 php 代码之前添加 ob_start() 将防止标头已发送错误。

      它对我有用

      下面的代码也有效。但它首先加载页面,然后在我使用它时重定向。

      echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$redirect_url.'">';
      

      【讨论】:

        【解决方案7】:
        <?php
        
            http_redirect("relpath", array("name" => "value"), true, HTTP_REDIRECT_PERM);
        
        ?>
        

        【讨论】:

          【解决方案8】:

          您可以使用此代码在php中重定向

          <?php
          /* Redirect browser */
          header("Location: http://example.com/");
          /* Make sure that code below does not get executed when we redirect. */
          exit;
          ?>
          

          【讨论】:

            【解决方案9】:

            是的。

            本质上,只要不输出任何内容,您就可以在发出位置标头之前做任何您想做的事情(终止会话、删除用户 cookie、将 Pi 计算为“n”位数字等)。

            【讨论】:

              【解决方案10】:

              如果你想在你的 php 文件中包含重定向而不一定在顶部,你可以在顶部激活输出缓冲,然后从页面内的任何地方调用重定向。示例;

               <?php
               ob_start(); //first line
               ... do some work here
               ... do some more
               header("Location: http://www.yourwebsite.com/user.php"); 
               exit();
               ... do some work here
               ... do some more
              

              【讨论】:

                【解决方案11】:

                header() 函数执行以下操作:

                header("位置:user.php");

                【讨论】:

                • 请根据 HTTP 规范使用绝对 URL。
                • 是的,但请确保先删除回声,否则您可能会遇到“标题已发送”;)
                猜你喜欢
                • 2013-11-13
                • 2013-11-18
                • 1970-01-01
                • 2014-04-21
                • 1970-01-01
                • 2011-11-06
                • 1970-01-01
                • 2022-01-19
                • 2021-10-01
                相关资源
                最近更新 更多