设置变量并使用header()

时间:2011-03-13 22:48:04

标签: php header

我正在开发一个自定义内容管理脚本,我正在进行页面重定向。

下面的代码将URL代码与数据库中某个页面ID的URL进行比较,如果这两个URL不相同,则会重定向用户。

但是,我想添加一个变量,以便我们可以检查页面是否已被重定向。它不起作用。

if (isset ( $_GET ['id'] ) && $rawdata) {
        if ($_SERVER ["REQUEST_URI"] != $rawdata ['htmltitle']) {
            header ( "HTTP/1.1 301 Moved Permanently" );
            header ( "Location: http://${_SERVER['SERVER_NAME']}:${_SERVER["SERVER_PORT"]}${rawdata['htmltitle']}" );
            $redirected = true;
            ;
        }
    }

if ($redirected == true) {
            print_redirect_nonexpected ();
        }

function print_redirect_nonexpected (){
echo "<!-- REDIRECTED _ NOT _ EXPECTED ? -->";
}

该功能未运行,因此没有回显。 我在这里做错了什么想法?

3 个答案:

答案 0 :(得分:1)

当您发送Location:标头时,用户代理会停止加载当前页面并加载您要加载的任何页面,因此您永远不会看到输出。

但是,您的代码可能 * 继续在后台执行,因此通常您希望关注header() exit;以防止不必要的行为。

* 取决于服务器配置和ignore_user_abort

此外,header("Location: /{$rawdata['htmltitle']}");就足够了。由于您要重定向到同一服务器,因此绝对路径就足够了。不要使用$_SERVER变量使重定向过度复杂化。

答案 1 :(得分:1)

使用此:

header ( "Location: http://".$_SERVER['SERVER_NAME'].$_SERVER['SERVER_PORT'].$rawdata['htmltitle']);

如果$ rawdata ['htmltitle']是您网页的完整网址,请使用以下网址:

header ( "Location: http://".$rawdata['htmltitle']);

并且在die()之后添加header()是好的。

答案 2 :(得分:-1)

只要发送了Location标头,浏览器就会中止当前操作并在重定向位置获取页面。这意味着,对于所有意图和目的,位置('header:example.com')将具有与die()基本相同的效果。您可以使用输出缓冲覆盖此行为,也可以在脚本中将header()调用移至lower down。但是,您无法在print_redirect_unexpected调用之后将它们移动到,因为将任何输出发送到浏览器也会导致所有标头也被发送,您将无法再发送任何标头。

基本上,你需要打开输出缓冲。