【问题标题】:Redirecting a page automatically in PHP在 PHP 中自动重定向页面
【发布时间】:2012-12-25 14:40:28
【问题描述】:

我想在 PHP 中自动重定向页面

注销.php:

<?php 
  include "base.php"; 
  $_SESSION = array(); session_destroy();
?>
<meta http-equiv="refresh" content="=0;URL=index.php" />

base.php 在哪里调用数据库并启动会话:

<?php
  session_start();  
  $dbhost = "localhost";
  $dbname = "login";
  $dbuser = "root";
  $dbpass = "";
  mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL Error: " . mysql_error());  
  mysql_select_db($dbname) or die("MySQL Error: " . mysql_error());  
?>  

按注销时,我没有回到index.php

【问题讨论】:

标签: php html http


【解决方案1】:

据我所知,HTMLJavaScriptPHP 提供了他们自己的页面/标题重定向方式。下面是三个例子,展示了如何重定向到http://google.com

#JavaScript:

<script type="text/javascript">
    window.location = "http://google.com";
</script>

#HTML:

<meta http-equiv="refresh" content="0; URL='http://google.com'"/> 

注意 content="0; 中的 0 是秒值。它告诉浏览器在开始重定向之前应该等待多少秒。

#PHP:

<?php

header('Location: http://www.google.com');

注意 PHP header() 必须始终放置在向浏览器输出任何内容之前;甚至一个空的空间。否则会导致臭名昭著的“header already sent”错误。

【讨论】:

    【解决方案2】:

    这应该可以,你在0 之前有一个额外的=

    <meta http-equiv="refresh" content="0;URL=index.php" />
    

    林奇https://en.wikipedia.org/wiki/Meta_refresh

    【讨论】:

      【解决方案3】:

      你可以把它放在你的 PHP 代码中:

      header('Location:index.php');
      

      请注意,根据所有headers,它必须放在任何输出之前(甚至是空格)。

      【讨论】:

      • 我本来打算写,但谁是第一,永远是赢家!
      • 很高兴您在标题之前提到了关于输出的事实
      • 根据 HTTP 规范应该是一个完整的(也就是绝对的)URL。
      • @gamehelp16 - 实际上建议在使用 redirect() 时使用绝对 URL;函数而不是相对 URL 的
      • 我想得到部分必须放在任何输出之前(甚至是空格)
      【解决方案4】:

      元刷新语法略有错误

      <meta http-equiv="refresh" content="0;URL='<?php echo $_SERVER['HTTP_HOST']; ?>/index.php'">
      

      更多细节在这里 http://en.wikipedia.org/wiki/Meta_refresh

      更简洁的方法是发送一个 http 重定向标头

      更多细节在这里 http://en.wikipedia.org/wiki/HTTP_301

      注销.php

      <?php
      ..
      session_destroy();
      header( 'HTTP/1.1 301 Moved Permanently');
      header( 'Location: ' . $_SERVER['HTTP_HOST']  . '/index.php' );
      exit(0);
      

      关于重定向中的绝对 URI,W3C 说

      14.30 地点

      Location 响应头字段用于将接收者重定向到 Request-URI 以外的位置,以完成请求或识别新资源。对于 201(已创建)响应,位置是请求创建的新资源的位置。对于 3xx 响应,位置应该指示服务器的首选 URI,用于自动重定向到资源。字段值由单个绝对 URI 组成。

         Location       = "Location" ":" absoluteURI
      

      一个例子是:

         Location: http://www.w3.org/pub/WWW/People.html
      

      来源:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

      【讨论】:

      • 同意 meta 不是重定向的好方法,顺便说一下,在您看来(OFF TOPIC)是停止缓存带有元标记的内容还是应该用另一种方法好?
      • @soft genic 我更喜欢标头,因为它可以在 HEAD 请求中读取,并且可以由代理(如代理)读取,而不仅仅是检索浏览器。此外,开销稍大一点,这并没有真正的区别(HTML 可以被 gzip 压缩,标题不能)
      • @Pee Haa,感谢您的提醒。我已经修改了上面的代码
      【解决方案5】:

      如果您需要使用 PHP 变量重定向网页,您可以这样做:其中$user[0] 是 PHP 变量。这样下一个网页user.php就可以得到变量的值了。

      header('Location:./user.php?u_id='.$user[0]);
      

      header("Location:./user.php?u_id=$user[0]");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多