强制http / https:如何检测https以及重定向时要发送的状态标头?

时间:2012-01-17 22:08:25

标签: php http https http-status-codes

我写了一个脚本来强制通过http或https访问网站的某些部分。我们希望将用户重定向到正常的http页面,以防他们意外登陆https版本,反之亦然。到目前为止,这么好,但我有2个问题给你们。

  1. 切换协议时要发送的正确状态标头是什么?在重定向之前,我目前正在两种情况下使用它:

    header('HTTP/1.1 301 Moved Permanently');
    
  2. 检测我们是否使用https的首选方法是什么?

    // if ($_SERVER['SERVER_PORT'] == 443) /* EDIT: OK, not this? */
    
    if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) === 'on'))
    

    还有别的吗?两个

  3. 对评论的回复:

    • 我们正在使用Apache,但是如果有一个通用的解决方案会很棒。

    • 我们不想使用.htaccess,因为https所需的网页已被我们正在使用的CMS“标记”,并且这是其中的一部分。我们不希望将URL“硬编码”到文件中。

1 个答案:

答案 0 :(得分:2)

  1. 301重定向是正确的方法。您无法在HTTP和HTTPS中间切换。必须在客户端重新加载页面。
  2. 第二种方法,通过$_SERVER['HTTPS']是首选方法。只需确保您的Web服务器支持它。