我最近在域上设置了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"); } ?>
任何人都可以详细说明这个代码,找到解决这个现在长期存在的问题的方法。
答案 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';