2014-11-25 151 views
0

我正在与其他人在今年早些时候构建的应用程序上使用非盈利软件。该网站需要安全,所以我与他们的主机合作以获得安装的SSL证书。据我所知,更新.htaccess服务器文件将更容易执行重定向,但我们的约定在3周左右结束。通过非营利性客户联系人向托管公司提出要求很困难。作为替代方案,我希望有一个基于php的重定向以防万一。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

我敢肯定,Dreamhost的将允许在目录中使用的.htaccess在他们的主机上。如果没有,你可以轻松联系他们的支持,并让他们知道你需要它。大多数托管公司已启用.htaccess文件,包括共享,虚拟,专用和虚拟专用帐户上的godaddy和其他托管公司。它的一个共同特点。 – unixmiah 2014-11-25 05:58:28

回答

0

你的问题就在这里:

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

这段代码说的是 “如果HTTP_HOST变量是localhost127.0.0.1,然后重定向到SSL站点”。然后,在redirectToHTTPS()函数中,您将重定向到您正在检查的完全相同的HTTP_HOST。所以,基本上,你要说的是:

if (true) { 
    redirectToHTTPS(); 
} 

您需要进行检查的协议,而不是HTTP_HOST

define('HTTPS', isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN)); 
if (! HTTPS) { 
    redirectToHTTPS(); 
} 
+0

我不太了解你的观点。我试图识别本地主机,而不是重定向。从我所了解的if条件是,if条件将主机与我的数组进行比较,并且由于它对于NOT in-array是OOK,那么任何不是本地域的域都应该运行重定向函数。该函数应该确定是否使用了https,如果是,则不会重定向。 – Mike 2014-11-26 06:37:00