我正在开发一个自定义内容管理脚本,我正在进行页面重定向。
下面的代码将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 ? -->";
}
该功能未运行,因此没有回显。 我在这里做错了什么想法?
答案 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调用之后将它们移动到,因为将任何输出发送到浏览器也会导致所有标头也被发送,您将无法再发送任何标头。
基本上,你需要打开输出缓冲。