我知道之前已经介绍过但我找不到答案,
我一直用这个;
header("Location: http://www.website.com/");
exit();
这一直在我当前的项目中工作,突然之间它在我的任何浏览器中都无效
我想找出问题并修复它而不是使用
echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>";
我也启用了错误报告,但没有显示错误
// SET ERROR REPORTING
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
ini_set('display_errors', TRUE);
任何想法为什么不起作用?
答案 0 :(得分:18)
尝试:
error_reporting(E_ALL | E_WARNING | E_NOTICE);
ini_set('display_errors', TRUE);
flush();
header("Location: http://www.website.com/");
die('should have redirected by now');
看看你得到了什么。你不应该在你的error_reporting()调用中使用^(xor),因为你无意中要求所有错误除了通知和警告..这就是“已经发送的标题”错误。
编辑:
同时尝试将flush()放在header()调用的正上方。
答案 1 :(得分:14)
尝试删除位置之间的空格和http中的第一个h。
header("Location: http://www.website.com/");
exit();
变成
header("Location:http://www.website.com/");
exit();
我的WAMP服务器出现了这个问题。
虽然它应该不是问题,但考虑到它是如何在PHP文档中记录的。但无论如何你应该尝试一下。我知道在很多情况下它对我有用。
答案 2 :(得分:12)
1) echo..
之前不应有任何输出(即 header(.......);
或HTML代码)命令。
2) <?php
之前和{{1}之后不应该有空格(或换行) }标签。
3) GOLDER RULE! - 文件(和其他?>
- d个文件)应该包含 UTF8,不含BOM 编码(而不仅仅是 UTF-8 )。这在许多情况下都是问题(因为典型的 UTF8 编码文件在文件输出的开头有一些特殊字符)!!!!!!!!!!!
4) 重定向时,include()
之后必须使用header(...);
5)建议的做法 - 始终在参考中使用301或302:
exit;
6)如果上述方法都没有帮助,请使用JAVSCRIPT重定向(但Google强烈建议不要这样做),但这可能是最后的机会......:
header("location: http://example.com", true, 301 ); exit;
答案 3 :(得分:4)
试试这个。为我工作。
echo "<meta http-equiv='refresh' content='0;url=http://www.yoursite.com'>";
答案 4 :(得分:1)
此外,当您使用标头功能时,它必须是在将任何文本(甚至是空格)写入客户端之前调用的第一件事,因此请再次检查在您通话之前是否还没有输出空格
<?php
答案 5 :(得分:1)
这可能是奇怪的解决方案,但尝试这一点,将页面编码从utf8更改为ANSI,它将起作用。
使用任何文本编辑器并将页面保存为ANSI编码并将其上传到您的在线服务器。
答案 6 :(得分:1)
添加ob_start()解决了这个问题。
答案 7 :(得分:0)
访问该页面时会发生什么?您可以尝试使用Firebug或任何其他工具来分析HTTP标头并检查重定向是否真的发生以及Location
标头是否真的存在。
答案 8 :(得分:0)
您还应该验证您是否重定向到有效位置,并且该位置具有正确的404和500错误消息/页面设置。可能是你只是重定向一个不好的地方。
答案 9 :(得分:0)
很奇怪,但删除php中的空行对我有用: - \
之前代码:
<?php
header("Location: http://www.website.com/");
?>
有效的代码:
<?php header("Location: http://www.website.com/"); ?>
答案 10 :(得分:0)
试试这个(为我工作):
echo '<script>window.location.replace("http://www.example.com")</script>';
而不是
header("Location: http://www.example.com");
答案 11 :(得分:0)
如果索引页面是html文件,则可能无效。将其更改为index.php并使用以下代码:
<?php
header("Location: http://ea.tc");
?>
答案 12 :(得分:0)
我实际上有一个与此相似的案例,我的管理页面包含在我所有其他页面的顶部。在该行下方每页的顶部:
<?php include '../../admin.php' ?>
我会有php逻辑:
<?php if($_SESSION['username'] === null){ header("Location: ./adminLogin.php");}?>
这个问题是在其他地方我也在调用/操纵header(...
。在经过我的代码很多时间之后,我承认我无法弄清楚问题出在哪里。然后我想在执行任何其他操作之前,每个文件都会访问我的admin.php
文件。所以我想到如果我将每个视图顶部的逻辑放入我的admin.php
文件中(因为除非你已经登录,我不希望任何东西可见),我会想到会发生什么?
发生了什么事情之前它甚至在我的视图中得到了任何一个php / html它评估了某人是否已登录($_SESSION['username'])
),如果它是NULL
那么我只是重定向到adminLogin页面。我把这个逻辑放在我的开关之前,它对我曾经需要逻辑的所有文件都很有效。我的方式在开发中起作用,但在生产中提出了很多问题。我发现将重定向逻辑移到我的admin.php
文件不仅避免了重复的header(...
操作,而且通过从我的视图文件中移除多余的逻辑并进入我的admin.php
,实际上使我的代码更有效率文件。
不要将逻辑放在每个视图文件中,而是在切换之前将其放入控制器中一次。奇迹般有效!如果您不希望任何人访问任何敏感视图,除非他们登录,这非常有用。在我的情况下,这对我的CMS很重要。但是,如果有一些文件要在不登录的情况下可以查看,那么我认为原始逻辑就足够了。您似乎已经找到了解决方案,但希望如果您再次遇到此错误,这可能会有所帮助。 :)