php - 标头位置重定向:https 到 https,http 到 http
Posted
技术标签:
【中文标题】php - 标头位置重定向:https 到 https,http 到 http【英文标题】:php - header location redirect: https to https, http to http 【发布时间】:2012-02-06 18:00:42 【问题描述】:如何正确使用header函数,所以
header("location: http://".$_SERVER['HTTP_HOST']."/?para=abc"); //for http
和
header("location: https://".$_SERVER['HTTP_HOST']."/?para=abc"); //for https
如果可能的话,可以写成 1 个字符串吗?
.htaccess 文件将负责将所有 http 页面重定向到 https 没有问题,但我相信在header("location:...)
中为 http/https 页面使用正确的语法是有意义的,因此对于所有浏览器都是正确的.
【问题讨论】:
【参考方案1】:您也可以使用以下代码:
header("Location: //www.google.com");
【讨论】:
这对我不起作用。它将 URL 附加到当前根 url。【参考方案2】:$protocol='http';
if (isset($_SERVER['HTTPS']))
if (strtoupper($_SERVER['HTTPS'])=='ON')
$protocol='https';
header("location: $protocol://".$_SERVER['HTTP_HOST']."/?para=abc");
【讨论】:
【参考方案3】:if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != '')
header("location: https://".$_SERVER['HTTP_HOST']."/?para=abc");
else
header("location: http://".$_SERVER['HTTP_HOST']."/?para=abc")
这至少应该适用于 Apache。
【讨论】:
【参考方案4】:您可以通过执行以下操作来隔离协议类型:
$protocol = isset($_SERVER['HTTPS']) and 'https' or 'http'
然后
header("location: $protocol://".$_SERVER['HTTP_HOST']."/?para=abc");
【讨论】:
【参考方案5】:您可以通过以下代码获取协议:
$protocol = strtolower( substr( $_SERVER[ 'SERVER_PROTOCOL' ], 0, 5 ) ) == 'https' ? 'https' : 'http';
然后像这样重定向
header( 'location: ' . $protocol . '://' . $_SERVER[ 'HTTP_HOST' ] . '/?para=abc' );
【讨论】:
以上是关于php - 标头位置重定向:https 到 https,http 到 http的主要内容,如果未能解决你的问题,请参考以下文章
IFRAME 中的 PHP“标头(位置)”,加载到 _top 位置?