使用PHP从HTTPredirect到HTTPS

我正在购物车网站上工作,我想在用户input帐单详细信息时将用户redirect到HTTPS页面,并在下一页保持HTTPS连接,直到他退出。

我需要在服务器上安装什么(我正在使用Apache)才能做到这一点,以及如何从PHP完成这个redirect?

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

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

你可以随时使用

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

redirect到保存URL。

但我会build议通过.htaccess和Apache重写规则来做到这一点。

在IIS上使用PHP从HTTPredirect到HTTPS

我无法redirect到HTTPS以在运行MS Internet信息服务(IIS)版本6的Windows服务器上工作。 我更习惯于在Linux主机上使用Apache,所以我转向Internet寻求帮助,当我search“phpredirecthttp到https”时,这是最高排名的Stack Overflow问题。 但是,选定的答案不适合我。

经过一些试验和错误之后,我发现在IIS中, $_SERVER['HTTPS']被设置为off非TLS连接。 我认为下面的代码应该帮助任何其他通过search引擎来到这个问题的IIS用户。

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

编辑 :从另一个堆栈溢出的答案 ,一个更简单的解决scheme是检查if($_SERVER["HTTPS"] != "on")

这是一个很好的方法来做到这一点:

 <?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(); } ?>