以编程方式确定连接是通过HTTP还是通过HTTPS进行的?

时间:2011-03-21 22:14:20

标签: php https

我想将我的网站用户从http://mysite重定向到https://mysite

如何在PHP中以编程方式执行此操作?

4 个答案:

答案 0 :(得分:7)

您可以使用if(!empty($_SERVER['HTTPS']))检查是否使用了SSL。

如果您使用的是标准端口,那么$_SERVER['SERVER_PORT'] == 443的测试也会有效,但当然检查是否使用HTTPS比测试端口是否为默认SSL端口要好。


但是,重定向不应该通过PHP完成,而是通过.htaccess(如果你使用Apache):

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

答案 1 :(得分:2)

使用$_SERVER['HTTPS']确定。

答案 2 :(得分:2)

如果是https,则变量$_SERVER['HTTPS']将设置为非零:

if (isset($_SERVER['HTTPS'])) {
    # it's https
} else {
    # it's not https
}

答案 3 :(得分:2)

如果$_SERVER['HTTPS']设置为on,则页面将通过https加载。但是,您应该将Cookie标记为安全,您可以使用setcookie中的一个参数执行此操作。如果cookie不安全,它们可能通过未加密的http传输,并且可能被盗,即使用户被立即重定向也是如此。

http://php.net/manual/en/function.setcookie.php

对于实际的重定向,我使用.htaccess重写,而不是PHP。使用以下内容创建.htaccess文件。

RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on
RewriteCond ^(.*)$ https://www.example.com/$1 [R=301,L]