Answers:
尝试这样的事情(应该适用于Apache和IIS):
if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === "off") {
$location = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $location);
exit;
}
if( $_SERVER['HTTPS'] == "off")
才能使此代码正常工作。我认为这是因为我使用的是IIS,而不是OP上的Apache。
这是一个很好的方法:
<?php
if (!(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' ||
$_SERVER['HTTPS'] == 1) ||
isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
$_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'))
{
$redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $redirect);
exit();
}
?>
!(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on'
将始终为false,因为如果最后一部分为true,则第一部分为false。
我无法重定向到HTTPS,无法在运行MS Internet Information Services(IIS)版本6的Windows服务器上工作。我比较习惯在Linux主机上使用Apache,因此我向Internet寻求帮助,这是当我搜索“ php redirect http to https”时排名最高的Stack Overflow问题。但是,选择的答案对我不起作用。
经过一番尝试和错误后,我发现对于IIS,对于非TLS连接,$_SERVER['HTTPS']
它设置off
为。我认为以下代码应该可以帮助通过搜索引擎解决此问题的所有其他IIS用户。
<?php
if (! isset($_SERVER['HTTPS']) or $_SERVER['HTTPS'] == 'off' ) {
$redirect_url = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header("Location: $redirect_url");
exit();
}
?>
编辑:从另一个堆栈溢出答案,一个更简单的解决方案是检查if($_SERVER["HTTPS"] != "on")
。
apache
,我发布此答案是为了让其他IIS用户(与我所处的情况类似)受益,他们可能会通过搜索引擎访问此页面。我赞成这样的观点,答案是对整个社区的利益,而不仅仅是OP。
您可以随时使用
header('Location: https://www.domain.com/cart_save/');
重定向到保存URL。
但是我建议通过.htaccess和Apache重写规则来实现。
在我的AWS beantalk服务器上,没有看到$ _SERVER ['HTTPS']变量。我确实看到$ _SERVER ['HTTP_X_FORWARDED_PROTO']可以是'http'或'https',因此,如果您托管在AWS上,请使用以下命令:
if ($_SERVER['HTTP_HOST'] != 'localhost' and $_SERVER['HTTP_X_FORWARDED_PROTO'] != "https") {
$location = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $location);
exit;
}