问题

是否可以通过使用PHP将用户重定向到其他页面?

假设使用者前往 www.example.com/page.php ,我想将它们重新导向至 www.example.com/index.php ,如何我这样做而不使用元刷新?可能?

这甚至可以保护我的网页免受未经授权的用户.



解决方法

现有答案摘要及我自己的两分钱:

1. Basic answer

您可以使用header()函数来发送新的HTTP标头,但必须在任何HTML或文字之前发送到浏览器(因此在<!DOCTYPE ...> 声明,例如).

header('Location: '.$newURL);

2. Important details

die()退出()

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

为什么要使用 die() exit(): The Daily WTF

绝对网址

网址必须是绝对网址.请参见 RFC 2616 .但在大多数情况下,也会接受相对网址.

状态代码

PHP的"位置"标头仍然使用 HTTP 302 重定向代码,但这是不是你应该使用的.您应该考虑 301 (永久重定向)或 303 (其他).

注意: W3C提及,303-头部与"许多前HTTP / 1.1用户代理不兼容"当前使用的浏览器都是HTTP / 1.1用户代理,对于许多其他用户代理,例如蜘蛛和机器人来说并不是这样.

3. Documentation

PHP Header和header()函数

4. Alternatives

您可以使用http_redirect($ url)的替代方法;需要安装 PECL软件包pecl .

5. Helper Functions

此函数未包含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. Workaround

如上所述header()重定向只有在任何东西被写出之前的工作.如果调用inmidst HTML 输出,则通常会失败.然后你可以使用HTML标题解决方法(不是很专业!)like:

 <meta http-equiv="Location" content="http://example.com/">

或JavaScript重定向甚至.

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



相关问题推荐