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 位置?

PHP标头重定向不起作用并停留在login.php上

标头位置相对路径兼容性

PHP PHP标头重定向到WWW

从 Chrome 重定向到带有位置标头的 302 后被阻止的 Android 应用

PHP标头未重定向到感谢页面