如何在PHP中进行重定向?
是否可以通过使用PHP将用户重定向到其他页面?
假设用户转到,我想将他们重定向到,在不使用元刷新的情况下,我该怎么做?可能吗?www.example.com/page.php
www.example.com/index.php
这甚至可以保护我的页面免受未经授权的用户的侵害。
是否可以通过使用PHP将用户重定向到其他页面?
假设用户转到,我想将他们重定向到,在不使用元刷新的情况下,我该怎么做?可能吗?www.example.com/page.php
www.example.com/index.php
这甚至可以保护我的页面免受未经授权的用户的侵害。
现有答案的总结加上我自己的两分钱:
您可以使用该函数发送新的 HTTP 标头,但这必须在任何 HTML 或文本之前(例如,在声明之前)发送到浏览器。header()
<!DOCTYPE ...>
header('Location: '.$newURL);
die() 或 exit()
header("Location: https://example.com/myOtherPage.php");
die();
为什么你应该使用 或 : 每日WTFdie()
exit()
绝对或相对网址
自 2014 年 6 月起,绝对和相对 URL 都可以使用。请参阅 RFC 7231,它取代了旧的 RFC 2616,其中只允许绝对 URL。
状态代码
PHP的“Location”标头仍然使用HTTP 302重定向代码,这是一个“临时”重定向,可能不是您应该使用的重定向。您应该考虑301(永久重定向)或303(其他)。
注意:W3C 提到 303 标头与“许多 HTTP/1.1 之前的用户代理”不兼容。目前使用的浏览器都是 HTTP/1.1 用户代理。对于蜘蛛和机器人等许多其他用户代理来说,情况并非如此。
HTTP 标头和 PHP 中的函数header()
您可以使用需要安装 PECL 包 pecl 的替代方法。http_redirect($url);
此函数不包含 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();
}
如前所述,重定向仅在写出任何内容之前起作用。如果在 HTML 输出中调用它们,它们通常会失败。然后,您可以使用HTML标头解决方法(不是很专业!),例如:header()
<meta http-equiv="refresh" content="0;url=finalpage.html">
或者甚至JavaScript重定向。
window.location.replace("https://example.com/");
使用 header()
函数发送 HTTP 位置
标头:
header('Location: '.$newURL);
与某些人的想法相反,与重定向无关。仅当要重定向而不是正常执行时才使用它。die()
文件示例.php:
<?php
header('Location: static.html');
$fh = fopen('/tmp/track.txt', 'a');
fwrite($fh, $_SERVER['REMOTE_ADDR'] . ' ' . date('c') . "\n");
fclose($fh);
?>
三次执行的结果:
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
恢复 — 强制性的 / 是一些与实际 PHP 无关的都市传说。它与客户端“尊重”标头无关。发送标头不会停止 PHP 执行,无论使用哪个客户端。die()
exit()
Location: