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


Forcing http/https: How to detect https and which status header to send when redirecting?

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

  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'))
    

    还有别的吗?二者都

回复意见:

  • 我们使用的是Apache,但如果有一个通用的解决方案,那就太好了。

  • 我们不想使用.htaccess,因为我们正在使用的CMS"标记"了https所需的页面,这是其中的一部分。我们不想将URL"硬编码"到一个文件中。

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