Apache 2.2 - 不能修改标头,它们已经发送



可能的重复项:
PHP 已发送的标头

网站的主URL将任何访问者重定向到本地子页面,我使用 freegeoip.net 来实现这一点,以及PHP:

<!DOCTYPE html>
<html>
<head>
<title>MLP Today</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="google-site-verification" content="*snip*" />
<?php
$csv = str_getcsv(file_get_contents('http://freegeoip.net/csv/'));
$geoloc = strtolower($csv[1]);
    if ($geoloc == 'hu' || 
        $geoloc == 'ro'){
        header("Location: hu/");
    }
    else if($geoloc == 'nl' || 
            $geoloc == 'be' || 
            $geoloc == 'de' || 
            $geoloc == 'sr' || 
            $geoloc == 'au'){
        header("Location: de/");
    }
    else {
        header("Location: en/");
    }
?>
<link rel="icon" type="image/png" href="img/favicon/favicon.png">
</head>
<body>
</body>
</html>

但是,从我的本地Apache服务器加载站点时,我收到一个错误,说:

警告:无法修改标头信息 - 标头已由 D:\DJDavid\Dokumentumok\Dropbox\Web\Today\index.php:7) 在第 13 行的 D:\DJDavid\Dokumentumok\Dropbox\Web\Today\index.php 中发送

第 13 行是:header("Location: hu/");

我之前读过一些答案,但所有这些答案都是指实时网站,而不是Apache Web服务器。有人说我必须在PHP代码之前和之后删除所有内容,但这没有帮助。此外,如您所见,我没有输出或返回任何内容,而这是此问题的第二大常见原因。第三个建议是,使用ob_start(),但这也没有帮助。

问题是,它在网络主机上完美运行,但当我使用 localhost(本地服务器)在上线前预览更改时则不然。

猜我必须在httpd.conf中改变一些东西,但我不知道是什么。

如果您的服务器开始发送 HTTP 200 OK 响应并像

<!DOCTYPE html>
<html>
<head>
<title>MLP Today</title>...

您无法将响应更改为 3xx 重定向。尝试在发送任何内容之前移动重定向逻辑。

另一种方法是打开缓冲输出,而不是通过以下方式尽可能快地发送它: ob_start()

这也可能是BOM问题(Windows记事本在文件开头添加了三个字节)

相关内容

  • 没有找到相关文章

最新更新