我正在与非营利组织合作,在今年早些时候由其他人建立的应用程序上。该站点需要是安全的,因此我与他们的主机一起安装了SSL证书。我知道更新.htaccess服务器文件会更容易执行重定向,但我们的约定将在大约3周后结束。很难通过非营利性客户联系方式将要求提供给主办公司。作为替代方案,我希望有一个基于PHP的重定向,以防万一。
这是所有网页上包含的应用页眉页面的开始部分。我们有3个具有不同域和生产域的测试服务器。我添加了一个条件,因此在本地运行时不会发生重定向。当我用我的条件调用该函数时,会在测试服务器上引起重定向循环(它们具有SSL证书)。有人可以帮我解决一些问题吗?感谢。
或者是否知道apache .htaccess文件是否可以作为Dreamhost的客户用户更新?
<?php
function redirectToHTTPS() {
if($_SERVER['HTTPS']!="on") {
$redirect= "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
header("Location:$redirect");
}
}
$serverList = array('localhost', '127.0.0.1');
if(!in_array($_SERVER['HTTP_HOST'], $serverList)) {
redirectToHTTPS();
}
ob_start();
include ($_SERVER['DOCUMENT_ROOT'].'/rmhcOmahaTeam/config/paths.php');
include ($_SERVER['DOCUMENT_ROOT'].'/rmhcOmahaTeam/config/db_connect.php');
?>
答案 0 :(得分:0)
你的问题在于:
$serverList = array('localhost', '127.0.0.1');
if(!in_array($_SERVER['HTTP_HOST'], $serverList)) {
redirectToHTTPS();
}
此代码说的是&#34;如果HTTP_HOST
变量是localhost
或127.0.0.1
,则重定向到SSL网站&#34;。然后,在redirectToHTTPS()
功能中,您重定向到您正在检查的完全相同的HTTP_HOST
。所以,基本上,你所说的是:
if (true) {
redirectToHTTPS();
}
您需要检查协议,而不是HTTP_HOST
:
define('HTTPS', isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN));
if ( ! HTTPS) {
redirectToHTTPS();
}