2012-11-13 184 views
0

我有一個代碼,它應該重定向,以防它沒有正確設置一些請求參數。使用404重定向不起作用

  if(!is_numeric($_GET['id'])){ 
         header("HTTP/1.0 404 Not Found"); 
        header('Location: '.$url); 
        exit(); 
       } 

問題是,每當我檢查Firefoxes插件,活HTTP標頭,我看到302臨時重定向。這是爲什麼?爲什麼沒有404響應?

回答

2

問題是,只要我用Firefoxes插件檢查,現場HTTP HTTP 標題,我看到302臨時重定向。這是爲什麼?爲什麼沒有給出404 響應?

不知道你想在這裏做什麼但以下將提供您的目的。

if (! is_numeric($_GET['id'])) { 
    header('Location: ' . $url, true, 404); 
    exit(); 
} 
+0

它沒有做重定向..它只是扔了404 ..爲什麼 –

+0

您可以重定向(狀態碼302)或未找到(狀態碼404),但不能同時存在。 –

+0

嗯..所以你說的是我做了302重定向..雖然.....可能我可以簡單地重定向,然後扔404與htaccess ..但我不認爲它會工作 –

4

404狀態碼發送Location標題是沒有意義的。

Location表示「是在這裏你要的」

404的意思是「我沒有問你什麼」

這兩種說法是不兼容的。

如果您想發送一個特定的人類可讀的錯誤說明,那麼就像輸出任何其他類型的文檔一樣輸出它。你可以include()它,如果你喜歡。不要嘗試重定向到它。

+0

如果我使用的位置,它給了我302狀態碼..所以我需要將它與404結合。我知道我可以使用包括..有點什麼我使用..我想要的是產生一個狀態碼。並在同一時間更改網址或許 –

+0

@DmitryMakovetskiyd - 它是如何找不到的東西和其他地方在同一時間? – Quentin

+0

當我改變一個位置..新的URL是由服務器獲得並通過htaccess。在htaccess中,它轉到另一個重定向302,以轉到目標頁面。這就是爲什麼當我第一次將頭部集合提交爲404時,當涉及到htaccess時,它將覆蓋404頭部重定向以及它自己的302重定向。這就是爲什麼我結束了302重定向而不是404重定向 –

0

如上所述,您只能發送您嘗試的其中一個標頭。

在404的情況下 - 這將顯示錯誤相關錯誤頁面,如您所定義的Web服務器配置。

要做你想做的事......你將需要修改服務器的404從一個普通的HTML到一個PHP頁面,並找出從那裏顯示什麼(你可以基於引用等)。

從'動態'404頁面中,您可以根據需要重定向。

+1

您可以發送儘可能多的標題,只要你喜歡。發送帶有位置的404是沒有意義的。 – Quentin

+0

對不起是的......我就是這麼意思:) – Brian

+0

嗯..然後把這個在htaccess也許:ErrorDocument 404 /errormessages/404.php –