Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每个页面上的PHP函数都会导致重定向循环_Php_Apache_.htaccess_Redirect_Ssl - Fatal编程技术网

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

每个页面上的PHP函数都会导致重定向循环,php,apache,.htaccess,redirect,ssl,Php,Apache,.htaccess,Redirect,Ssl,我正在与非营利组织合作开发一个应用程序,该应用程序是今年早些时候由其他人开发的。该网站需要安全,所以我与他们的主机合作安装了SSL证书。我知道更新.htaccess服务器文件将更容易执行重定向,但我们的约定将在大约3周后结束。很难通过非盈利客户联系人将需求反馈给东道主公司。作为替代方案,我希望有一个基于php的重定向,以防万一 这是所有页面中包含的应用程序标题页的开始部分。我们有3个不同域的测试服务器和一个生产域。我添加了一个条件,以便在本地运行时不会发生重定向。当我使用我的条件调用函数时,会导

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

你的问题在于:

$serverList = array('localhost', '127.0.0.1');
if(!in_array($_SERVER['HTTP_HOST'], $serverList)) {
    redirectToHTTPS();
}
这段代码的意思是,如果HTTP_主机变量是localhost或127.0.0.1,则重定向到SSL站点。然后,在redirectToHTTPS函数中,您将重定向到与您检查的HTTP_主机完全相同的主机。所以,基本上,你说的是:

if (true) {
    redirectToHTTPS();
}
您需要检查协议,而不是HTTP_主机:


我确信dreamhost将允许在其主机上的目录中使用.htaccess。如果没有,您可以轻松联系他们的支持,让他们知道您需要它。大多数托管公司都启用了.htaccess文件,包括godaddy和其他托管公司,它们使用共享、虚拟、专用和虚拟专用帐户。这是一个共同点。我不太明白你的意思。我试图识别localhost,而不是重定向。据我所知,if条件将主机与我的数组进行比较,并且由于它不在数组中,因此任何非本地主机域的内容都应该运行重定向功能。然后,该函数应确定是否使用了https,如果是,则不会重定向。
define('HTTPS', isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN));
if ( ! HTTPS) {
    redirectToHTTPS();
}