【发布时间】:2014-12-12 17:47:12
【问题描述】:
我已经看到这个问题发布了一千次,但我还没有看到以下情况的答案。也许已经存在?
我已经确定的一些事情:
-
<?php和?>周围有 NO 个空格。 - 没有 echo 语句。
- 没有打印语句或任何其他“输出数据语句”
存在一个问题:
有问题的代码被“包含在导致问题的“布局页面”中,也许有人可以告诉我如何解决这个问题?
所以这里是代码,我没有写这个,我只是在维护它。
$pagetitle = $_SERVER['REQUEST_URI'];
switch ($pagetitle) {
...
case "/locations.php?l=8" :
echo '<title>Mississauga West, Canada Winemaking - Vinbon</title>';
break;
...
}
在那个 case 语句中,我尝试执行以下操作,但知道由于 echo 语句可能无法正常工作。
case "/locations.php?l=8" :
ob_start();
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.New-Website.com");
die();
ob_end_flush();
break;
现在我知道你们已经在一些答案中声明不要在上面设置回声,因为这可能会导致问题。我想ob_start() 会解决这个问题吗?
如您所见,这一定是 301 重定向。
现在这段代码位于名为inc_meta.php 的文件中,然后包含(非必需)在名为layer01.php 的文件中。
它在运行时会导致以下“警告”:
Warning: Cannot modify header information - headers already sent by (output started at /home/content/46/11552446/html/layout/layer01.php:5) in /home/content/46/11552446/html/layout/layer01.php on line 10
Warning: Cannot modify header information - headers already sent by (output started at /home/content/46/11552446/html/layout/layer01.php:5) in /home/content/46/11552446/html/layout/layer01.php on line 11
现在第 5 行是我们执行 <? include inc_meta.php ?> 的地方,而 layer01.php 只不过是一个 html 文件。
第 10 行是<body> 标记上方的一个空格,第 11 行是<body> 标记。
我不能使用 javascript,因为这必须是该位置的 301 重定向。有人有什么想法吗?
更新 1
所以我尝试删除 echo 语句,因为我认为你们会说这是问题
我现在明白了:
Warning: Cannot modify header information - headers already sent by (output started at /home/content/46/11552446/html/layout/layer01.php:5) in /home/content/46/11552446/html/layout/inc_meta.php on line 51
Warning: Cannot modify header information - headers already sent by (output started at /home/content/46/11552446/html/layout/layer01.php:5) in /home/content/46/11552446/html/layout/inc_meta.php on line 52
第 51 和 52 行参考:
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.New-Website.com");
【问题讨论】:
-
我看到的第一个错误 .. 你在 ob_start() 之前使用 echo 产生的输出和标题不再起作用
-
我认为我确实删除了它,同样的错误。 @donald123
-
@donald123 请查看更新版本。
-
我建议您做的是一一删除包含/要求,直到您不再收到错误为止。然后,将它们一一添加,直到您开始出现错误。只有这样,你才会知道是哪一个造成了破坏。另外,也不要在等式之外留下字节顺序标记。这也算作输出。
-
第 5 行上方发生了什么?在 layer01.php 中?我的理解是,一旦您开始发送信息,就无法调整标题。因此,如果您将该 php 代码嵌入到 html 文件中,例如
<html><?include...?>,那么您将无法修改标头,因为<html>已经发送。
标签: php redirect http-status-code-301 legacy-code