2017-03-05 1253 views
2

我試圖讓Laravel 5(5.1.31)在找不到頁面時返回404的http狀態響應。我曾嘗試一些東西,它總是返回200如何使Laravel 5返回404狀態碼

在我的控制器我有這樣的:

else 
    { 
    header('HTTP/1.0 404 Not Found'); 
    return view('errors.404); 
    } 

我也曾嘗試:

else 
    { 
    http_response_code(404); 
    return view('errors.404); 
    } 

else 
    { 
    abort(404, 'Page not found'); 
    } 

我也試過把這個放在404.刀片

@inject('response', 'Illuminate\Http\Response') 
{{ $response->status(404) }} 

沒有成功。無論我嘗試什麼,Laravel都會返回200.我如何獲得它返回404?

+0

https://laravel.com/docs/5.1/errors。你在哪裏看到代碼200?在開發人員工具欄中? –

+0

在瀏覽器中,當我加載頁面時,laravel返回200作爲狀態碼。我需要它返回404找不到頁面,這對於搜索引擎蜘蛛來說尤其重要,以便他們知道他們何時到達了錯誤的地址。 –

+0

'中止(404)'應該工作。你的if語句的其他部分是否被執行? –

回答

5

雖然我不知道爲什麼中止不返回404種狀態,因爲它是假設,我沒有找到一個解決方案,這將使Laravel返回404種狀態:

這裏是我做過什麼:

else { 
    $data['title'] = '404'; 
    $data['name'] = 'Page not found'; 
    return response() 
     ->view('errors.404',$data,404); 
} 

這實際上對我的目的更好,因爲它不會像我的中止一樣弄亂我的404.blade的內容。

4

很簡單,我假設你使用Laravel V5 ++只是去

app > Exceptions > Handler.php 

見下面的圖片:

enter image description here

而且從修改代碼:

public function render($request, Exception $e) 
{ 
    return parent::render($request, $e); 
} 

public function render($request, Exception $e) 
{ 
    if ($e instanceof MethodNotAllowedHttpException) 
    { 
     abort(404); 
    } 
    return parent::render($request, $e); 
} 

然後,不要忘記在errors文件夾添加404.blade.php頁:

enter image description here

那麼,你可以在404.blade.php自己定製的404頁。


只有當您運行的URL並沒有列爲路由這種情況。您可以在web.php文件中找到。

如果你需要通過自定義調用,只需在控制器調用象下面這樣:

public function show_me() 
{ 
    abort(404); //404 page 
} 

希望它能幫助!

+0

已經有/errors/404.blade.php。 已經嘗試在我的控制器中使用abort(404)。它正在返回正確的404刀片,但它仍然向瀏覽器發送狀態代碼200,而不是正確的404錯誤代碼。 您可能希望閱讀整個問題,因爲所有這些信息都在原始問題中,以及我正在運行的Laravel版本是什麼。 –

相關問題