【问题标题】:php - header location redirect: https to https, http to httpphp - 标头位置重定向:https 到 https,http 到 http
【发布时间】:2012-02-06 18:00:42
【问题描述】:

如何正确使用header函数,所以

header("location: http://".$_SERVER['HTTP_HOST']."/?para=abc"); //for http

header("location: https://".$_SERVER['HTTP_HOST']."/?para=abc"); //for https

如果可能的话,可以写成 1 个字符串吗?

.htaccess 文件将负责将所有 http 页面重定向到 https 没有问题,但我相信在header("location:...) 中为 http/https 页面使用正确的语法是有意义的,因此对于所有浏览器都是正确的.

【问题讨论】:

    标签: http https header location


    【解决方案1】:

    您也可以使用以下代码:

    header("Location: //www.google.com");
    

    【讨论】:

    • 这对我不起作用。它将 URL 附加到当前根 url。
    【解决方案2】:
    $protocol='http';
    if (isset($_SERVER['HTTPS']))
      if (strtoupper($_SERVER['HTTPS'])=='ON')
        $protocol='https';
    
    header("location: $protocol://".$_SERVER['HTTP_HOST']."/?para=abc");
    

    【讨论】:

      【解决方案3】:
      if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != '') {
          header("location: https://".$_SERVER['HTTP_HOST']."/?para=abc");
      } else {
          header("location: http://".$_SERVER['HTTP_HOST']."/?para=abc")
      }
      

      这至少应该适用于 Apache。

      【讨论】:

        【解决方案4】:

        您可以通过执行以下操作来隔离协议类型:

        $protocol = isset($_SERVER['HTTPS']) and 'https' or 'http'
        

        然后

        header("location: $protocol://".$_SERVER['HTTP_HOST']."/?para=abc");
        

        【讨论】:

          【解决方案5】:

          您可以通过以下代码获取协议:

          $protocol = strtolower( substr( $_SERVER[ 'SERVER_PROTOCOL' ], 0, 5 ) ) == 'https' ? 'https' : 'http';
          

          然后像这样重定向

          header( 'location: ' . $protocol . '://' . $_SERVER[ 'HTTP_HOST' ] . '/?para=abc' );
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-09-06
            • 2018-08-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-27
            相关资源
            最近更新 更多