2013-02-07 24 views

回答

5

$_SERVER['HTTPS']如果使用HTTPS则非空。但是,您最好在Web服务器级别执行HTTPS强制实施,例如,

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

<virtualhost example.com:443> 
    blah blah blah 
</virtualhost> 
+1

如果足够重要,我只需在https上设置apache来提供内容,而不是在http上。 – moodboom

+0

,但您仍然需要在非https链接上重定向,因为太多人在输入https时会错过https中的's'。 –

+0

好的,如果它是着陆页。在那种情况下,我会在那里放置一个非安全版本的页面(使用登录按钮或任何重定向到https的)。这只是我,在我可怜的小家庭服务器上有十几个虚拟主机,每个HTTPS必须使用不同的端口。普通用户永远不会输入端口部分的权利。 :-)不过,你的建议很好,也很简洁。 – moodboom

2

在.htaccess文件,添加以下:

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

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

(前提是用户已经浏览过这个网站,或者你的网站添加到内置HSTS列表。)

http://dev.chromium.org/sts为如何被添加到内置的名单,以及头的外观的例子喜欢。

2

唯一正确的答案是因为您配置服务器的行为方式。

如果您不知道,绝对有信心,在向PHP发送请求时,无论它是通过HTTP还是HTTPS发送,那么您的系统都不安全。

相关问题