Php 设置变量并使用标头()

Php 设置变量并使用标头(),php,header,Php,Header,我正在开发一个自定义内容管理脚本,并且正在进行页面重定向 下面的代码将URL代码与数据库中某个页面ID的URL进行比较,如果两个URL不相同,则会重定向用户 但是,我想添加一个变量,这样我们就可以检查页面是否被重定向。它不起作用了 if (isset ( $_GET ['id'] ) && $rawdata) { if ($_SERVER ["REQUEST_URI"] != $rawdata ['htmltitle']) { 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 ? -->";
}
if(isset($\u GET['id'])&&&rawdata){
if($\u服务器[“请求URI”]!=$rawdata['htmltitle'])){
标题(“HTTP/1.1 301永久移动”);
标题(“位置:http://${u服务器['SERVER_NAME']}:${u服务器['SERVER_端口]]}${rawdata['htmltitle']}”);
$redirected=true;
;
}
}
如果($redirected==true){
打印\u重定向\u非预期();
}
函数打印\u重定向\u非预期(){
回声“;
}
函数没有运行,因此没有回音。
知道我这里做错了什么吗?

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


所以基本上,您需要打开输出缓冲

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


所以基本上,您需要打开输出缓冲

当您发送
位置:
标题时,用户代理将停止加载当前页面,并加载您告诉它加载的任何页面,因此您将永远看不到输出

但是,您的代码可能*继续在后台执行,因此通常您希望在
标题()之后退出
以防止不必要的行为

*取决于服务器配置和


另外,
头(“位置:/{$rawdata['htmltitle']}”)就足够了。由于您正在重定向到同一服务器,因此绝对路径就足够了。不要使用
$\u SERVER
变量无故过度复杂重定向。

当您发送
位置:
标题时,用户代理将停止加载当前页面,并加载您告诉它加载的任何页面,因此您将永远看不到输出

但是,您的代码可能*继续在后台执行,因此通常您希望在
标题()之后退出
以防止不必要的行为

*取决于服务器配置和

另外,
头(“位置:/{$rawdata['htmltitle']}”)就足够了。由于您正在重定向到同一服务器,因此绝对路径就足够了。不要使用
$\u服务器变量使重定向过度复杂化。

使用以下方法:

header ( "Location: http://".$_SERVER['SERVER_NAME'].$_SERVER['SERVER_PORT'].$rawdata['htmltitle']);
如果$rawdata['htmltitle']是页面的完整URL,请使用以下方法:

header ( "Location: http://".$rawdata['htmltitle']);
并且在
头()之后添加
die()
也很好。

使用以下方法:

header ( "Location: http://".$_SERVER['SERVER_NAME'].$_SERVER['SERVER_PORT'].$rawdata['htmltitle']);
如果$rawdata['htmltitle']是页面的完整URL,请使用以下方法:

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

而且在
头()之后添加
die()
也很好。

-1:
头('Location:')
不会终止活动脚本。但是,它确实会阻止您查看脚本的输出。当试图阻止未经授权的用户进行不必要的
删除时,这是一个重要的细微差别。我确实说过“本质上”。虽然脚本一直在运行,但您永远看不到它的输出,因此效果与die()几乎相同,除非您的脚本导致文件系统/数据库发生更改。这一点非常重要,除非。-1:
header('Location:')
不会终止活动脚本。但是,它确实会阻止您查看脚本的输出。当试图阻止未经授权的用户进行不必要的
删除时,这是一个重要的细微差别。我确实说过“本质上”。虽然脚本一直在运行,但您永远看不到它的输出,因此效果与die()几乎相同除非您的脚本导致文件系统/数据库发生更改。这是一个非常重要的除非。那么我该如何处理这种情况?@Shamil:在重定向URL中使用GET变量传递状态信息,或者使用
$\u会话
变量。@Shamil:它是如何失败的?不是重定向,而是输出通常传递到浏览器的URL。。。另外,
标题(“位置:/${rawdata['htmltitle']}”)就足够了。因为您正在重定向到同一个服务器,并且绝对路径就足够了。url(HtmlTile)可以是:page.24,但是正确的url是page.1。系统使用该数字来正确识别页面url。那么我该如何处理这种情况呢?@Shamil:在重定向url中使用GET变量传递状态信息,或者使用
$\u SESSION
变量。@Shamil:它是如何失败的?不是重定向,而是输出通常传递到浏览器的URL。。。另外,
标题(“位置:/${rawdata['htmltitle']}”)就足够了。因为您正在重定向到同一个服务器,并且绝对路径就足够了。url(HtmlTile)可以是:page.24,但是正确的url是page.1。系统使用该号码来