2011-11-22 46 views
0

我有一個表單。表格填寫完成後,用戶點擊提交按鈕,用戶將被帶到一個感謝頁面。在感謝頁面上有一個鏈接(錨定標籤),供用戶訪問她的主頁。它可以正常工作20次。PHP跳過腳本並單擊錨標記

問題是,有時PHP會跳過謝謝頁面並直接進入主頁。這怎麼可能? PHP如何點擊鏈接?我已經完成了代碼,它是完全正確的。沒有JavaScript,只是HTML和CSS。

就像我說的,它不會每次都這樣做,我想這不是一個出價交易,我只想了解發生了什麼。我正在使用一個簡單的標題重定向像這樣

$url = "thanks/"; 
header("Location: $url"); 
exit(); 

你們認爲怎麼樣?有什麼辦法可以阻止它嗎?

謝謝

+2

代碼看起來不錯...可能問題出在代碼的其他部分... – gustavotkg

+1

聽起來像重定向到默認頁面,當找不到請求的網頁。你能以某種方式重現這種行爲嗎?您是否試過跟蹤瀏覽器發出的請求(例如,使用'Live HTTP Headers' - AddOn for FireFox),然後比較兩種情況? – Quasdunk

+0

問題可能是你的$ url變量...如果你的實際網站是例如http://mysite/form.php,那麼它會讓你前往http:// mysite/thanks /,如果你的網站是http://mysite/form然後它會將您轉到http:// mysite/form/thanks ...我不知道您使用了哪個框架,但我認爲這可能是您的標題轉發問題。 – Daniel

回答

1

RFC for the Location header需要一個絕對URI。這也是在註釋部分的PHP manual指出:

HTTP/1.1需要一個絕對URI作爲參數傳遞給»位置:包括 方案,主機名和絕對路徑,但有些客戶接受 相對URI。你通常可以使用$ _ SERVER [「HTTP_HOST」], $ _ SERVER [「PHP_SELF」]和目錄名()從 相對一個使絕對URI自己

該問題可能是與事實做您將非標準標題傳遞給瀏覽器。瀏覽器以不同的方式解釋格式錯誤的標題字符串,並不總是按預期行事。同樣如PHP手冊中所示,您應該在將它傳遞給header()函數之前創建絕對URI,而不是絕對路徑或相對路徑。

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

我在PHP手冊中看過,但並不認爲它適用。另外我正在重定向到不同的目錄。這些都沒有解釋它如何進入一個無法點擊鏈接就無法到達的頁面。我承認我沒有用頭做很多事情,但99%的時間都在工作。不過感謝一個新的想法。 – user1054606

+0

我還沒有完成檢查,但使用絕對路徑似乎是在伎倆。我仍然不明白瀏覽器如何在感謝頁面上遵循標籤,而不顯示頁面或執行任何處理。奇怪。 – user1054606