2014-11-25 149 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