2014-02-17 47 views
0

我在我的域中有幾個文件夾,每個文件夾內包含一個index.php文件,用於檢查數據庫連接是否通過或失敗,如果失敗,頁面被重定向到頂級文件(在所有文件夾之外)稱爲offline.php。這部分工作很好。我使用的是如果db是脫機重定向的基本格式是:在PHP中獲取引用URL和文件夾名稱

if (!$dbconnect) { 
header("Location: https://www.test.com/offline.php"); 
} 

然後,offline.php頁面中,我需要檢查,看看哪個文件夾所帶來的用戶對offline.php頁,並根據將他們帶到offline.php頁面的文件夾向用戶顯示唯一的消息。

例如:

test.com/test1/index.php重定向到offline.php,消息會說 'test1的把你帶到這個頁面'

test.com/test2/index。 PHP重定向到offline.php,消息會說'test2帶你到這個頁面'。

在多個瀏覽器我試過下面的代碼,它總是導致「未知URI」:

$url = 'https://' . $_SERVER['HTTP_REFERER'] ; 
if (strpos($url,'test') !== false) { 
echo 'test'; 
} elseif (strpos($url,'test1') !== false) { 
echo 'test1'; 
} elseif (strpos($url,'test2') !== false) { 
echo 'test2'; 
} else { 
echo 'unknown uri'; 
} 

建議?

編輯 由於HTTP_REFERER內容不可靠,我已經決定把所有的條件index.php頁面中,忘了offline.php頁面。巨大的謝謝大家誰提出了建議!

+0

我看到你已經添加了一些東西,因爲我早些時候回答。當你只是回顯$ _SERVER ['HTTP_REFERER'],會發生什麼? – OrganizedChaos

+0

沒有顯示,只是一個空白頁。 – user1172854

+0

$ _SERVER ['HTTP_REFERER']不可靠,請謹慎使用 – 2014-02-17 22:05:02

回答

0

如果您offline.php頁面上使用下面的代碼,你可以看到所有的$ _ SERVER變量可用(指URL是在那裏)

echo '<pre>',print_r($_SERVER),'</pre>'; 

從那裏,你可以採取$ _ SERVER [ 'HTTP_REFERER']使用選擇大小寫,或者如果然後聲明並實現您的目標。

根據你在評論中的一些問題和人們指出使用$ _SERVER ['HTTP_REFERER']不可靠,你可以改爲這樣做。

在你的index.php頁面上用dbconnect檢查,你可以修改它是這樣的。 header("Location: https://www.test.com/offline.php?org=".urlencode($_SERVER['REQUEST_URI']));

然後,在offline.php,

$page = urldecode($_GET['org']); 
$org = explode('/',$page); 

回聲$組織[1]得到斜線後的第一個值,$組織[2]將獲得下一個值等。

+0

剛剛嘗試過,但引用網址未包含在列表中,是否應該列出? – user1172854

+0

這取決於瀏覽器。在某些瀏覽器中,引用者是執行重定向的頁面,而在其他瀏覽器中,則是通過重定向鏈接到頁面的頁面。 – Barmar

+0

查看http://stackoverflow.com/questions/2158283/will-a-302-redirect-maintain-the-referer-string – Barmar

1

爲什麼你會使用重定向?它們在服務器上很沉重,很慢而且很簡單,舊的不必要。使用switch語句,並有1個控制頁面,而不是多個文件夾和頁面。