如何在PHP中进行重定向?
是否可以通过使用PHP将用户重定向到其他页面?
假设用户访问www.example.com/page.php
,我想将它们重定向到www.example.com/index.php
,但如何在不使用元刷新的情况下这样做? 可能?
这甚至可以保护我的网页免受未经授权的使用
现有答案总结加我自己的两分钱:
1.基本答案
您可以使用header()
函数发送新的HTTP标头,但必须在HTML或文本之前将其发送到浏览器(例如,在<!DOCTYPE ...>
声明之前)。
header('Location: '.$newURL);
2.重要细节
die()或exit()
header("Location: http://example.com/myOtherPage.php");
die();
为什么你应该使用die()
或exit()
:每日WTF
绝对网址
该网址必须是绝对的。 请参阅RFC 2616.但在大多数情况下,也会接受相对URL。
状态码
PHP的“位置”标题仍然使用HTTP 302重定向代码,但这不是你应该使用的。 您应该考虑301(永久重定向)或303(其他)。
注意:W3C提到303-header与“许多pre-HTTP / 1.1用户代理不兼容”,目前使用的浏览器都是HTTP / 1.1用户代理,对于许多其他用户代理(如蜘蛛和机器人)来说并不是这样。
3.文件
HTTP头和PHP中的header()
函数
4.替代品
您可以使用http_redirect($url);
的替代方法http_redirect($url);
需要安装PECL包pecl。
5.助手功能
此功能不包含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();
}
6.解决方法
正如前面提到的header()
只在写出任何内容之前重定向。 如果调用内部HTML输出,它们通常会失败。 然后,您可以使用HTML标头解决方法(不是很专业!),如:
<meta http-equiv="refresh" content="0;url=finalpage.html">
或甚至JavaScript重定向。
window.location.replace("http://example.com/");
function Redirect($url, $permanent = false)
{
if (headers_sent() === false)
{
header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
}
exit();
}
Redirect('http://www.google.com/', false);
不要忘了死()/退出()!
使用echo从PHP输出JavaScript,它将完成这项工作。
echo '<script type="text/javascript">
window.location = "http://www.google.com/"
</script>';
除非您缓冲页面输出,然后再检查重定向条件,否则您无法在PHP中真正做到这一点。 这可能太麻烦了。 请记住,标题是从页面发送的第一件东西。 大部分重定向通常在页面稍后需要。 为此,您必须缓冲页面的所有输出,并稍后检查重定向条件。 此时,您可以重定向页面用户标题()或简单地回显缓冲的输出。
有关缓冲的更多信息(优点)
什么是输出缓冲?
链接地址: http://www.djcxy.com/p/891.html