2010-05-09 107 views
0

當下面的腳本到達標頭('location:php_email_thankyou.php')時,我總是收到500內部服務器錯誤。PHP標頭位置重定向導致500內部服務器錯誤

我不確定是什麼導致這種情況,因爲我可以在if語句之前或之後放置標題表達式,它工作正常。在螢火蟲它提到了php_email_thankyou.php頁面不知道這意味着什麼一個GET請求......

<?php 

ini_set('display_errors', 'On'); 
error_reporting(E_ALL | E_STRICT);  

include('php/cl/cl_val.php'); 
$val = new Validate; 
$print_errors = false; 

if (isset($_POST['email(email)'])){ 
    if(isset($_SERVER['HTTP_X_REQUESTED_WITH'])) 
    { 
     $validation = $val->clean($_POST); 
     if (isset($validation['send'])) 
     { 
      header('location:php_email_thankyou.php'); 
      exit(); 
     } 
     else 
     { 
      print json_encode($validation); 
      exit(); 
     } 
    } 
    else 
    { 
     $validation = $val->clean($_POST); 
    } 
} 

?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

感謝堆!

+0

您確定它不是導致服務器錯誤的目標文件嗎? – 2010-05-09 13:30:20

+0

另外,你可以看看你的服務器的錯誤日誌?它們將包含500發生的解釋。 – 2010-05-09 13:30:47

+0

嘗試在地址欄中手動輸入php_email_thankyou.php的網址,並瀏覽至地址欄,查看是否可以真正轉到該網頁而不出現任何錯誤。如果通過手動瀏覽它,你仍然收到500錯誤,那麼這意味着錯誤來自謝謝頁面,而不是來自重定向頁眉。 – Amry 2010-05-09 13:32:17

回答

0

HTTP/1.1要求過去的位置是絕對路徑,而不是相對路徑。嘗試這個;

header('Location: http://yourdomain.com/php_email_thankyou.php'); 
+0

這就是你現在的想法,你也可以指定相對路徑。 – Sarfraz 2010-05-09 14:30:09

+0

瀏覽器傾向於支持相對重定向,但RFC明確要求使用絕對URI,正如MatW所述:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30所以不要感到驚訝如果位置標頭中的相對路徑無法與某些用戶代理一起使用。 「它在Firefox中工作」並不意味着它是正確的。 – 2010-05-09 15:31:31

+0

嘿,謝謝大家的回答。 目標文件是O.K,我可以導航到它。 我不認爲這是一個絕對/相對的問題,因爲當我把標題重定向放在第一行或者甚至在DOCTYPE聲明之前它可以正常工作,所以我讚賞它可能不是技術上正確的語法,但它仍然有效。 我在想也許它是一個Ajax問題?也許這個頁面還在加載,那麼ajax正在滴答。 – Globalz 2010-05-09 21:31:31

相關問題