我可能的重复项:
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记事本在文件开头添加了三个字节)