http到https使用php转发

时间:2014-08-18 13:15:48

标签: php https http-status-code-301 forwarding

我最近在域上设置了SSL。这是在共享主机上,这似乎导致将网站重定向到https的问题。我之前questions曾就这个问题提出过问题但没有成功。任何尝试似乎都会导致站点进入无限重定向循环。我已经通过托管该站点的服务提供了以下代码,它解决了重定向问题,但并未跨所有浏览器。在Chrome上,代码可以按预期将http页面转发给其https对应页面。但是,Internet Explorer中的测试似乎将所有页面转发到https主页,Firefox似乎只显示错误屏幕。代码如下

 <?php 
 if ($_SERVER['HTTP_X_FORWARDED_SSL'] == '1') {      header("Location: $redirect");    } else {    $redirect = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];    header("Location: $redirect"); } ?> 

任何人都可以详细说明这个代码,找到解决这个现在长期存在的问题的方法。

4 个答案:

答案 0 :(得分:1)

我不知道为什么它不起作用,但尝试使用以下代码将http://重定向到https://

if(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == ""){
    $redirect = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    header("Location: $redirect");
}

这适用于所有浏览器。希望这可以帮助您

答案 1 :(得分:1)

使用以下代码:

<?php
if(isset($_SERVER['HTTPS'])) {
   $prefix = 'https://';
} else {
$prefix = 'http://';
}

$location = $prefix.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
header("Location: $location");
exit;
}

?>

答案 2 :(得分:0)

我已从header("Location: $redirect");语句的true命令中删除了if,该脚本现在似乎适用于所有浏览器。

<?php 
 if ($_SERVER['HTTP_X_FORWARDED_SSL'] == '1') {  } else {    $redirect = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];  header("HTTP/1.1 301 Moved Permanently");  header("Location: $redirect"); } ?>

答案 3 :(得分:0)

使用此代码

$protocol = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) ? 'https' : 'http';