如何在PHP中进行重定向?

23 浏览
0 Comments

如何在PHP中进行重定向?

通过使用PHP,能否将用户重定向到不同的页面?

假设用户访问www.example.com/page.php,我想将他们重定向到www.example.com/index.php,如何在不使用meta刷新的情况下实现?这是可能的吗?

这甚至可以保护我的页面免受未经授权的用户访问。

0
0 Comments

使用header()函数发送一个HTTP Location header:\n\n

header('Location: '.$newURL);

\n\n与一些人的想法相反,die()与重定向无关。仅在想要重定向而不是正常执行时使用它。\n\n文件example.php:\n\n


\n\n三次执行的结果:\n\n

bart@hal9k:~> cat /tmp/track.txt
127.0.0.1 2009-04-21T09:50:02+02:00
127.0.0.1 2009-04-21T09:50:05+02:00
127.0.0.1 2009-04-21T09:50:08+02:00

\n\n恢复 - 必须要使用die()/exit()是一种与实际PHP无关的城市传说。这与客户端“尊重”Location:头文件无关。发送头文件不会停止PHP执行,无论所使用的客户端如何。

0
0 Comments

现有答案的总结以及我的两个观点:

1. 基本答案

您可以使用header()函数发送新的HTTP头,但必须在任何HTML或文本之前将其发送到浏览器(例如,在声明之前)。

header('Location: '.$newURL);

2. 重要细节

die()exit()

header("Location: https://example.com/myOtherPage.php");
die();

为什么应该使用die()exit()The Daily WTF

绝对或相对URL

自2014年6月以来,绝对和相对URL均可使用。请参阅RFC 7231,该标准已替换旧版的RFC 2616,旧版要求仅使用绝对URL。

状态码

PHP的“Location”头仍使用HTTP 302重定向代码,这是一个“临时”重定向,可能不是您应该使用的代码。您应该考虑使用301(永久重定向)或303(其他)。

注意:W3C提到,303-header与“许多不支持HTTP / 1.1的用户代理不兼容。目前使用的浏览器都是HTTP / 1.1用户代理。这对于许多其他用户代理(如蜘蛛和机器人)不适用。

3. 文档

HTTP标头和PHP中的header()函数

4. 替代方案

您可以使用另一种方法http_redirect($url);,需要安装PECL包pecl

5. 辅助函数

此函数不包括303状态代码:

function Redirect($url, $permanent = false)
{
    header('Location: ' . $url, true, $permanent ? 301 : 302);
    exit();
}
Redirect('https://example.com/', false);

这更灵活:

function redirect($url, $statusCode = 303)
{
   header('Location: ' . $url, true, $statusCode);
   die();
}

6. 解决方案

如上所述,header()重定向只在任何内容被写入之前起作用。如果它们在HTML输出中被调用,它们通常会失败。那么您可以使用一个HTML标题解决方法(不是非常专业!)例如:

 

或者甚至使用JavaScript重定向。

window.location.replace("https://example.com/");

0