PHP实现重定向

本文俺将跟大家探讨几种实现重定向的方法。

PHP实现重定向

基础实现方式

您可以使用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/");
(0)
上一篇 2020年10月16日 下午5:56
下一篇 2020年10月16日 下午6:48

相关推荐

发表回复

登录后才能评论