【问题标题】:Header Location dont work on live server but works on localhost标头位置不适用于实时服务器,但适用于 localhost
【发布时间】:2013-03-30 19:44:05
【问题描述】:

如果用户设置了下拉菜单的值,我有这段代码可以将用户重新定位到 index.php 在不相关的页面上设置它,请检查我的代码。

if(isset($_GET['d'])&&empty($_GET['d'])===false){
        $cur_page=$_SERVER['PHP_SELF'];
        $current_page = substr($cur_page,1);
        $possible_page = array('terms.php','contact.php','about.php');

        if(in_array($current_page,$possible_page)){
               header('Location:/index.php?d='.$_GET['d'].'');
       exit();
    }else{
       echo $_GET['d'];
    }

它在我的本地服务器上运行良好,但在实时服务器上却不行?

【问题讨论】:

  • 您需要更好地解释“不起作用”的含义。您的标题中还需要一个空格,即:'Location: /index.php?d='
  • 如果标头已经发送,header() 不起作用。一旦将某些内容输出到页面,就会发生这种情况,即使是 PHP 标记之前的空格或字节顺序标记。
  • 你试过header('Location: index.php?d='.$_GET['d'])吗? (不带斜线)
  • @adeneo 好吧,这无法解释为什么它在本地工作但不能在现场工作。
  • 在靠近脚本顶部的某处输入error_reporting(E_ALL);,因为您可能在某处遇到错误,并且可能是“第 X 行已发送标头”。

标签: php header location


【解决方案1】:

在 php 脚本的最开始添加ob_start();。如果它包含另一个文件,那么最后不要使用?>。谢谢

【讨论】:

  • 这应该是一个评论,然后如果他说“不”,那么你可以建议它作为答案:)
  • 感谢 Jonast,这个社区的新手会慢慢学会使用它的 :)
  • @jonast92 它不应该是评论。它有能力成为答案,因为ob_start()header 有影响。谁在评论中写答案并询问我是否将其作为答案发布?
  • 所以鼓励或不鼓励这样回答?
  • 不是。我们可能首先要问我们所有的反问题,弄清楚情况,然后提出我们的解决方案。目前你的答案在技术上不是一个答案,它是一个肯定答案不是一个确认的解决方案的问题
【解决方案2】:

我总是使用这个小方法,在任何情况下都能完美运行。

public static function Redirect($sec, $file)
{
    if (!headers_sent())
    {
        header( "refresh: $sec;url=$file" ); 
    }
    elseif (headers_sent())
    {
        echo '<noscript>';
        echo '<meta http-equiv="refresh" content="'.$sec.';url='.$file.'" />';
        echo '</noscript>';
    }
    else
    {
        echo '<script type="text/javascript">';
        echo 'window.location.href="'.$file.'";';
        echo '</script>';
    }
}

在最后一种情况下,它肯定会重定向。

【讨论】:

    猜你喜欢
    • 2014-04-03
    • 2012-06-14
    • 2020-09-03
    • 2012-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    相关资源
    最近更新 更多