2012-08-01 49 views
1

在一個基於php的應用程序,我一直在編碼,我有下面的代碼小塊:

if (isset($_SERVER['QUERY_STRING'])) { 
    header("Location: " . $_SERVER['QUERY_STRING']); 
} 

在我的申請,我使用框架和框架。此代碼存在於主內容區域框架中,並且在IE中執行後,會創建無限循環,除非我手動停止加載,否則會導致殺死瀏覽器。

此代碼的目的是檢測是否有附加到url的查詢字符串,如果是,則重定向到該查詢字符串。我一直在開發使用鉻和 和火狐 ,今天決定在IE9中測試它。我沒有在任何以前的版本中測試過它,但到目前爲止,這種行爲只發生在IE中,我坦白地說,爲什麼會發生這種情況。我在這裏和互聯網上搜索了類似的問題,但迄今沒有骰子。

編輯

正如我先前的編輯指出,我使用框架和框架來控制接口。左側框架(側欄)包含與主「內容」區域框架的基本目標的鏈接。內容區域框架的內容包含javascript,它將查詢字符串附加到父窗口的url,以便在訪問索引頁(存在查詢字符串)時,它會將內容框架重定向到特定頁面。

這在Chrome中運行得很好。不是IE瀏覽器(或者我剛剛發現的這個編輯器中的firefox)。也就是說,將其重定向到索引頁面,即包含框架集的頁面,並且它會永久執行此操作,並在側邊欄之後創建側邊欄。

+0

你有沒有試過得到'$ _SERVER ['QUERY_STRING']裏面的內容?(例如通過回顯)? – 2012-08-01 02:48:04

+0

@AlvinWong我有,沒有任何迴應,雖然下面的答案,與你的評論配對讓我思考線,讓我解決我的問題。 – Daedalus 2012-08-01 02:51:13

+0

......你至少可以提到解決問題的方法。 – ceejayoz 2012-08-01 02:53:30

回答

0

我有點恨自己沒有想到這更早,因爲這是多麼可怕的簡單。我所做的一切,是檢查是否$_SERVER['QUERY_STRING']是空的,像這樣:

if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '') { 
    header("Location: " . $_SERVER['QUERY_STRING']); 
} 

這解決了創造無限嵌套的框架和幀索引頁的問題。

+0

不要忘記,當計時器接受你的答案.. – 2012-08-03 17:06:47

+0

@sixeightzero謝謝你提醒我。 – Daedalus 2012-08-03 20:13:44

+0

np。只是想保持清潔...:D – 2012-08-03 21:31:25

0

嘗試以下操作:

session_start(); 

if (!isset($_SESSION['Redirect']) && isset($_SERVER['QUERY_STRING'])) { 
    $_SESSION['Redirect'] = true; 
    header("Location: " . $_SERVER['QUERY_STRING']); 
} 
+0

這不幸並不能解決問題;無限循環仍然執行。我會試着在上面的問題中更具體一些,以更好地解釋問題。 – Daedalus 2012-08-01 02:37:21

+0

嘗試以上。設置會話變量。如果沒有設置,它會設置會話變量,並重定向你。一旦重定向,它將被設置,而不是重定向你。 – 2012-08-01 02:42:06

+0

不幸的是,這並沒有奏效,但是你的答案與Alvin的評論配合使我想到了一條讓我解決這個問題的線路。我將立即張貼我曾經用來解決這個問題的內容。 – Daedalus 2012-08-01 02:53:33

0

我不知道這是否可以成爲你的問題都沒有,但按照HTTP/1.1,重定向要求完整的絕對路徑,包括主機名。因此,也許試試這個:

<?php 
/* Redirect to a different page in the current directory that was requested */ 
$host = $_SERVER['HTTP_HOST']; 
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
$extra = $_SERVER['QUERY_STRING']; 
header("Location: http://$host$uri/$extra"); 
exit; 
?> 

或者另一個建議是避免使用完整的查詢字符串(如?thispage.php),但使用GET參數,而不是(像?path=thispage.php)。

<?php 
/* Redirect to a different page in the current directory that was requested */ 
$host = $_SERVER['HTTP_HOST']; 
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
$extra = $_GET['page']; 
header("Location: http://$host$uri/$extra"); 
exit; 
?>