在PHP中如何使用header()函数重定向网页
Header()函数是PHP中用来设置HTTP头信息的函数,它可以设置HTTP响应头的各种属性,例如:缓存控制、字符编码、跨域、重定向等。在本文中,我们将主要探讨header()函数如何实现网页重定向。 网页重定向是指在浏览器中访问某个URL时,服务器返回一个HTTP响应码表明需要将访问者重定向到另一个URL。这是一种常见的网站设计技巧,用来跳转到目标页面。HTTP重定向有两种方式:重定向(redirect)和转发(forward)。本文中我们主要讲解如何实现重定向。
header()函数有一个参数:header(field, replace, http_response_code), 其中,field表示要设置的HTTP头信息;replace表示是否替代前面设置的同名的header信息(默认为True);http_response_code表示HTTP状态码。在实现重定向时,重点关注的是http_response_code参数的值。实现网页重定向,主要是通过header函数设置HTTP响应码来实现的。
301和302 HTTP状态码
当我们像浏览器发送HTTP响应时,可以设定一下三种状态码之一:
1. 301 Moved Permanently:永久性重定向。服务器告诉浏览器请求的页面已经永久性转移到新地址,浏览器收到该响应后会记住新的地址,并在以后的每次请求中自动转到新的地址。
2. 302 Found(或302 Moved Temporarily):临时性重定向。服务器告诉浏览器请求的页面已经暂时转移到新地址,浏览器会在下一次请求时请求新地址,之后又会跳回原地址。
3. 303 See Other:对页面的请求, 表示请求已经完成,并且客户端应当采取跳转行为,通常用于作为表单提交成功之后的跳转。
下面,我们讲解如何使用header()函数实现网页重定向。
一、实现重定向
重定向主要是向服务器请求, 服务器返回HTTP302状态码,并将Location响应头设置成需要跳转到的URL地址。
header('Location: http://www.example.com');
header()函数在输出HTTP头信息之前不能有任何输出,否则header()将无法修改HTTP头信息。所以,实现重定向前要先确保没有输出除空格、制表符等无意义字符以外的内容。
例如:
<?php
header('Location: http://www.example.com');
exit;
?>
通过上述代码我们可以看到,在处理重定向前,向浏览器提交任何其他内容都是非常危险的,因为这些额外的内容可能会干扰HTTP头信息的设置。 解决此问题的一种方法是,将所有代码保存在PHP文件顶部,然后调用header()函数执行程序退出。 上述示例将浏览器重定向到http://www.example.com。
二、实现永久性跳转
在处理重定向时,可以使用HTTP状态码设置它们的类型。对于永久重定向,可以设置状态码为HTTP 301,并设置一个新的位置,如新旧URL:
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.example.com/new_page.php");
这将导致浏览器永久性地重定向到http://www.example.com/new_page.php,之后浏览器将自动跳转到新网址,并在后续任何请求中自动提交新的URL,无需经过服务器的中继。
三、实现跳转时访问计数
有时我们在网站中需要对某个页面的访问情况进行统计,提供访问次数等其他信息。 可以在跳转前,记录一些数据信息,然后再跳转页面。 例如:
<?php
session_start();//开启 session
if( $vistorId = $this->LogVistorVisit() )
{
$_SESSION["vistorId"] = $vistorId;
}
header("HTTP/1.1 301 Moved Permanently");
header("Location:http://www.example.com");
exit;
?>
在该示例中,我们记录了用户访问某个页面的访问id号,将其设置在 session 中,试想,如果是需要提供访问分析等信息时,只需要从 session 中读取这些信息即可。
四、浏览器警告
有时候,我们需要实现在页面上显示一些提示信息,并延迟一段时间之后再将用户重定向到新页面。例如:我们可以将重定向时间设置为5秒,并在跳转前将一个警告信息显示在页面上,如下所示:
$message = "注意!网页将在5秒钟后自动跳转至另一个URL,请稍候...";
$url = 'http://www.example.com';
header("Refresh: 5; URL=$url");
echo ('<div class="tip">'.$message.'</div>');
在上述示例中,我们定义了一个$message变量,将消息作为 div 元素呈现在用户页面上。我们设置了一个5秒钟的刷新延迟时间,使用header()函数设置本页面的重定向地址头信息。用户将看到一个消息,强调需要等待跳转。同样的,由于HTTP的限制, 我们同样需要确保在输出div元素之外没有输出任何内容。
注: 在向 header() 函数传递长的 URi 字符串之前,一定要确保 url 被正确的 urlencode 编码。此外,在建议必须在输出HTTP响应主体之前调用header()函数。因为将其放在输出之后,可能会导致浏览器收到大量无效的数据,从而可能会导致与浏览器不兼容或错误的操作。
总之,通过以上介绍我们了解到,header()函数在PHP中非常重要,它可以实现HTTP响应头的各种属性设置。实现网页重定向需要设置HTTP响应码来实现。HTTP重定向有两种方式:重定向(redirect)和转发(forward)。在实现重定向时,需要注意header()函数在输出HTTP头信息之前不能有任何输出。最后,header()函数必须在输出HTTP响应主体之前调用。
