PHP页面重定向

ami*_*mit 143 php redirect header

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

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

bki*_*dow 271

是的,您将使用标头功能.

/* Redirect browser */
header("Location: http://www.yourwebsite.com/user.php"); 
exit();
Run Code Online (Sandbox Code Playgroud)

调用exit()正确的后置词是一个好习惯,这样它下面的代码就不会被执行.

另外,从文档:

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

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

  • "第二个特殊情况是"Location:"标题.它不仅将此标题发送回浏览器,而且还向浏览器返回REDIRECT(302)状态代码,除非201或3xx状态代码已经过组." (7认同)
  • 我被"后记"困扰了. (4认同)

bri*_*vis 47

使用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();
    }    
}
Run Code Online (Sandbox Code Playgroud)

如果你需要正确处理相对路径,我已经为此编写了一个函数(但这不在问题的范围内).

  • 多么具有描述性. (11认同)
  • 将此行更改为此,它将... ... die('<script type ="text/javascript"> window.location = \''.$ url.'\'; </ script>');` (8认同)
  • 除非用户已禁用JS,否则很好. (2认同)
  • 在这种情况下,您可以使用元重定向 `die('&lt;meta http-equiv="refresh" content="0; url=' . $url . '" /&gt;');` (2认同)

Cro*_*ord 16

简单的方法是使用:

  echo '<script>window.location.href = "the-target-page.php";</script>';
Run Code Online (Sandbox Code Playgroud)


Thu*_*asa 11

   $url='the/url/you/want/to/go';
   echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$url.'">';
Run Code Online (Sandbox Code Playgroud)

这对我很好.


cod*_*oop 8

header( "Location: http://www.domain.com/user.php" );
Run Code Online (Sandbox Code Playgroud)

但你不能先做回声,然后重定向.