使用PHP从HTTP重定向到HTTPS

时间:2011-02-24 14:57:25

标签: php https

我正在购物车网站上工作,我想在用户输入结算明细时将用户重定向到HTTPS页面,并保留下一页的HTTPS连接,直到他退出为止。

我需要在服务器上安装什么(我正在使用Apache)才能执行此操作,以及如何从PHP完成此重定向?

5 个答案:

答案 0 :(得分:211)

尝试这样的事情(应该适用于Apache和IIS):

if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === "off") {
    $location = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: ' . $location);
    exit;
}

答案 1 :(得分:14)

这是一个很好的方法:

<?php
if (!(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || 
   $_SERVER['HTTPS'] == 1) ||  
   isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&   
   $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'))
{
   $redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
   header('HTTP/1.1 301 Moved Permanently');
   header('Location: ' . $redirect);
   exit();
}
?>

答案 2 :(得分:5)

您可以随时使用

header('Location: https://www.domain.com/cart_save/');

重定向到保存网址。

但我建议通过.htaccess和Apache重写规则来实现。

答案 3 :(得分:5)

使用IIS上的PHP从HTTP重定向到HTTPS

我无法重定向到HTTPS以在Windows服务器上运行 它运行 MS Internet信息服务(IIS)的第6版。我更 曾经在Linux主机上使用Apache,所以我转向互联网 帮助,这是我搜索时排名最高的Stack Overflow问题 for “php redirect http to https”。但是,所选答案不起作用 对我来说。

经过一些试验和错误,我发现使用IIS,$_SERVER['HTTPS']是 对于非TLS连接,设置为 off 。我认为以下代码应该 帮助通过搜索引擎提出此问题的任何其他IIS用户。

<?php
if (! isset($_SERVER['HTTPS']) or $_SERVER['HTTPS'] == 'off' ) {
    $redirect_url = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header("Location: $redirect_url");
    exit();
}
?>

编辑:来自另一个Stack Overflow answer, 更简单的解决方案是检查if($_SERVER["HTTPS"] != "on")

答案 4 :(得分:0)

在我的AWS beantalk服务器上,没有看到$ _SERVER ['HTTPS']变量。我确实看到$ _SERVER ['HTTP_X_FORWARDED_PROTO']可以是'http'或'https',因此,如果您托管在AWS上,请使用以下命令:

if ($_SERVER['HTTP_HOST'] != 'localhost' and $_SERVER['HTTP_X_FORWARDED_PROTO'] != "https") {
    $location = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: ' . $location);
    exit;
}