每个页面上的PHP函数导致重定向循环

时间:2014-11-25 05:04:38

标签: php apache .htaccess redirect ssl

我正在与非营利组织合作,在今年早些时候由其他人建立的应用程序上。该站点需要是安全的,因此我与他们的主机一起安装了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');
?>

1 个答案:

答案 0 :(得分:0)

你的问题在于:

$serverList = array('localhost', '127.0.0.1');
if(!in_array($_SERVER['HTTP_HOST'], $serverList)) {
    redirectToHTTPS();
}

此代码说的是&#34;如果HTTP_HOST变量是localhost127.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();
}