我正在购物车网站上工作,我希望在用户输入结算明细时将用户重定向到HTTPS页面,并保留下一页的HTTPS连接,直到他退出为止.
我需要在服务器上安装什么(我正在使用Apache)才能执行此操作,以及如何从PHP完成此重定向?
Rap*_*hel 227
尝试这样的事情(应该适用于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;
}
Run Code Online (Sandbox Code Playgroud)
小智 14
这是一个很好的方法:
<?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();
}
?>
Run Code Online (Sandbox Code Playgroud)
你可以随时使用
header('Location: https://www.domain.com/cart_save/');
Run Code Online (Sandbox Code Playgroud)
重定向到保存URL.
但我建议通过.htaccess和Apache重写规则来实现.
我无法重定向到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();
}
?>
Run Code Online (Sandbox Code Playgroud)
编辑:从另一个堆栈溢出答案,一个更简单的解决方案是检查if($_SERVER["HTTPS"] != "on")。
在我的 AWS beanstalk 服务器上,我没有看到 $_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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
151643 次 |
| 最近记录: |