使用php的http到https转发
Posted
技术标签:
【中文标题】使用php的http到https转发【英文标题】:http to https forwarding using php 【发布时间】:2014-10-11 10:10:15 【问题描述】:我最近在域上设置了 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"); ?>
谁能详细说明这段代码以找到解决这个长期存在的问题的方法。
【问题讨论】:
【参考方案1】:使用此代码
$protocol = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) ? 'https' : 'http';
【讨论】:
【参考方案2】:我已经从if
语句的真实命令中删除了header("Location: $redirect");
,并且该脚本现在似乎可以在所有浏览器上运行。
<?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】:使用以下代码:
<?php
if(isset($_SERVER['HTTPS']))
$prefix = 'https://';
else
$prefix = 'http://';
$location = $prefix.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
header("Location: $location");
exit;
?>
【讨论】:
对不起,和上一个答案一样的问题【参考方案4】:我不知道为什么它不起作用,但请尝试下面的代码将 http:// 重定向到 https://
if(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == "")
$redirect = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
header("Location: $redirect");
这适用于所有浏览器。希望这对您有所帮助
【讨论】:
感谢您的及时回复。不幸的是,这段代码产生了同样的重定向循环问题。所以我更倾向于网站在共享主机上的问题。 此页面未正确转发。这与我之前就 htaccess 提出的问题相同。 ***.com/questions/25316295/… 好的,兄弟,一件事可能是您没有删除导致此重定向循环的 htaccess 代码,另一件事可能是您在输出后使用标头 htaccess 代码已被还原,我创建了一个 php 文件,其中仅包含此代码作为内容。 您是否在标题之前创建输出。也表示任何 html 标记或空格以上是关于使用php的http到https转发的主要内容,如果未能解决你的问题,请参考以下文章
将 http 转发到 https - Elastic Beanstalk + Nginx
节点 http-proxy:将流量转发到外部 https 站点 - 崩溃