什么';了解服务器是通过HTTP还是HTTPS访问的最佳方式


What's best way to know if server was accessed by HTTP or HTTPS?

对于Apache和PHP,了解它并强制使用HTTPS的最佳方法是什么?

我在phpinFO()中搜索了$_SERVER变量,但没有找到任何帮助。

编辑:感谢您的回答和建议!我不能在服务器级别强制它,因为它只用于登录页面。

如果使用HTTPS,则$_SERVER['HTTPS']不为空。但您最好在Web服务器级别执行HTTPS,例如

<virtualhost example.com:80>
   redirect permanent https://example.com
</virtualhost>
<virtualhost example.com:443>
   blah blah blah
</virtualhost>

在.htaccess文件中,添加以下内容:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/?(.*) https://YOUR_URL/$1 [R,L]
</IfModule>

此外,请考虑添加HSTS HTTP标头。这告诉浏览器甚至不要尝试访问HTTP版本,而是直接访问HTTPS。这可以防止可能的中间人攻击,你的重定向可能会被拦截。

(前提是用户以前访问过该网站,或者您的网站已添加到内置HSTS列表中。)

请参阅http://dev.chromium.org/sts了解如何添加到内置列表中,以及标头的外观示例。

唯一正确的答案是,您已将服务器配置为这种行为。

如果你完全不知道,当一个请求被发送到PHP时,它是通过HTTP还是HTTPS发送的,那么你的系统就不安全了。