是否可以通过使用 PHP 将用户重定向到不同的页面?
假设用户访问 www.example.com/page.php
并且我想将他们重定向到 www.example.com/index.php
,该怎么做我这样做时不使用元刷新吗?可能吗?
这甚至可以保护我的页面免受未经授权的用户的侵害。
最佳答案
现有答案的总结加上我自己的两分钱:
1。基本答案
您可以使用header()
函数来发送新的 HTTP header ,但这必须在任何 HTML 或文本之前发送到浏览器(例如,在 <!DOCTYPE ...>
声明之前)。
header('Location: '.$newURL);
2。重要细节
die() 或 exit()
header("Location: https://example.com/myOtherPage.php");
die();
为什么你应该使用die()
或exit()
: The Daily WTF
绝对或相对 URL
自 2014 年 6 月起,绝对 URL 和相对 URL 都可以使用。请参阅RFC 7231它已取代旧的 RFC 2616 ,其中只允许使用绝对 URL。
状态代码
PHP 的“Location” header 仍然使用 HTTP 302 -redirect 代码,这是一个“临时”重定向,可能不是您应该使用的。您应该考虑 301 (永久重定向)或 303 (其他)。
注:W3C mentions 303 header 与“许多 HTTP/1.1 之前的用户代理不兼容。当前使用的浏览器都是 HTTP/1.1 用户代理。对于许多其他用户代理(例如蜘蛛和机器人)而言,情况并非如此。
3。文档
HTTP header 和 header()
PHP 函数
4。替代方案
您可以使用http_redirect($url);
的替代方法这需要 PECL package 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()
重定向仅在写出任何内容之前起作用。如果invoked inmidst HTML,它们通常会失败输出。然后你可以使用 HTML header 解决方法(不是很专业!),例如:
<meta http-equiv="refresh" content="0;url=finalpage.html">
甚至是 JavaScript 重定向。
window.location.replace("https://example.com/");
关于php - 如何在 PHP 中进行重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47534543/