本文俺将跟大家探讨几种实现重定向的方法。
基础实现方式
您可以使用header()函数发送一个新的HTTP头,但是必须在任何HTML或文本之前(也就是在<!DOCTYPE…>之前)。
header('Location: '.$newURL);
重要细节
die() or exit()
header("Location: http://example.com/myOtherPage.php");
die();
为什么应该使用die()或exit()? 参见这篇文章。
绝对或相对URL
自2014年6月起,绝对和相对url都可以使用。参见RFC 7231,它取代了旧的RFC 2616,旧的RFC 2616只允许绝对url。
状态码
PHP的“Location”-header仍然使用HTTP 302-重定向代码,这是一个“临时”重定向,可能不是您应该使用的。您应该考虑301(永久重定向)或303(其他)。
注意:W3C提到303-header与“许多pre-HTTP/1.1用户代理”不兼容。当前使用的浏览器都是HTTP/1.1用户代理。对于蜘蛛和机器人等其他用户代理来说,情况并非如此。
文档
HTTP Headers和PHP中的header()函数。
http_redirect
你可以使用http_redirect($url)的替代方法;它需要安装PECL包PECL。
辅助函数
这个函数没有包含303状态码:
function Redirect($url, $permanent = false)
{
header('Location: ' . $url, true, $permanent ? 301 : 302);
exit();
}
Redirect('http://example.com/', false);
下面的代码比上面的更加灵活:
function redirect($url, $statusCode = 303)
{
header('Location: ' . $url, true, $statusCode);
die();
}
解决方案
如前所述,header()重定向仅在写入内容之前有效。如果在HTML输出中间调用它们,通常会失败。然后你可以使用一个HTML头部工作区(不是很专业!)。
<meta http-equiv="refresh" content="0;url=finalpage.html">
或者使用js来实现重定向。
window.location.replace("http://example.com/");