MySQL进程无法重定向后使用标头

时间:2014-06-25 02:26:12

标签: php html whitespace

在我们的网站中,我们正在实施免费注册系统,以便我们可以允许人们访问安全的个人信息,但如果他们直接访问该文件,我们需要重定向任何帮助,我们将非常感谢

<?php
include("../../account/core/init.php");
logged_in_redirect();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php include '../../bundles/base/inc/head.php'; ?>
</head>
<body>
    <?php include("../../bundles/base/inc/header.php"); ?>
    <div class="container page clearfix account-activation">
    <?php if(isset($_GET['email'], $_GET['email_code'])) {
        echo 'This is where the account will be activated';
    } else {
        header('Location: https://www.oursite.org/');
        exit();
    }
    ?>
</div>
<?php include("../../bundles/base/inc/footer.php"); ?>
</body>
</html>

这是我们的代码https://www.oursite.org/account/private/secure/activation/ 我们不断收到此错误:

  

警告:无法修改标头信息 - 已经在/ route / to / site / public_html中发送的标头(在/route/to/site/public_html/account/private/secure/activation/index.php:9处开始输出)第17行的/account/private/secure/activation/index.php

.htaccess文件

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /?username=$1 

您可以通过帐户/个人资料/用户名=用户访问个人资料但是我试图将其重写为account / profile / user /

3 个答案:

答案 0 :(得分:1)

问题是你的header调用只发生在发送到浏览器的HTML中间的PHP逻辑中。因此,当Apache解析HTML和HTML时,技术上已经将头部发送给最终用户。发送它。 PHP不会调用含义header,但就Apache而言,纯HTML等同于发送的内容等同于发送的标题。

解决方案?在HTML被渲染之前重构你的逻辑。

我们的想法是,不是立即echo,而是设置$message变量。因此,在任何HTML吐出之前,您的if / else逻辑就会发生。这样$message在任何事情发生之前就会被设置,然后$message的值可以在需要时传递给内联PHP。如果header需要重定向?嗯,这只发生在<!DOCTYPE html>发生之前:

<?php

include("../../account/core/init.php");
logged_in_redirect();

$message = ''
if(isset($_GET['email'], $_GET['email_code'])) {
  $message = 'This is where the account will be activated';
}
else {
  header('Location: https://www.oursite.org/');
  exit();
}

?><!DOCTYPE html>
<html lang="en">
<head>
<?php include '../../bundles/base/inc/head.php'; ?>
</head>
<body>
    <?php include("../../bundles/base/inc/header.php"); ?>
    <div class="container page clearfix account-activation">
    <?php echo $message; ?>
</div>
<?php include("../../bundles/base/inc/footer.php"); ?>
</body>
</html>

答案 1 :(得分:0)

Warning: Cannot modify header information - headers already sent by.......

表示您已经写出内容,服务器已开始将响应流式传输到客户端。您无法修改标题,因为它们已被发送。

将生成标题的代码移动到写入第一个输出之前的某个位置。

将此代码移至页面页眉的位置:

<?php if(isset($_GET['email'], $_GET['email_code'])) {
        echo 'This is where the account will be activated';
    } else {
        header('Location: https://www.oursite.org/');
        exit();
    }

如上所述:

https://stackoverflow.com/a/8028987/3739658

修改HTTP标头的一些功能是:

答案 2 :(得分:0)

使用: -

ob_start();
ob_clean();

确保ob_start()是网页中的第一行。

// clean the output buffer
ob_clean();