首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP header() 實現 404 狀態碼與 Nginx/Apache 整合最佳實踐

     編輯:PHP 相關知識

PHP 發送 404 標頭

<?php
// 必須在任何輸出之前
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found"); // 兼容 CGI/FCGI 模式
// 可選:輸出自訂 404 頁面內容
include __DIR__ . '/404.html';
exit;
?>

Web Server 整合關鍵差異

Apache

ErrorDocument 404 /404.php

Apache 會內部重導向至 /404.php,PHP 腳本正常執行,$_SERVER['REDIRECT_STATUS'] 為 404。

Nginx

# 錯誤寫法:Nginx 會發送 302 重導向,瀏覽器再請求 404.php,狀態碼變 200
error_page 404 /404.php;

# 正確寫法:等號強制內部重導向,保持 404 狀態碼
error_page 404 = /404.php;

= 符號指示 Nginx 保持原始錯誤碼進行內部重寫,PHP 端收到的 $_SERVER['REDIRECT_STATUS'] 即為 404。

完整 404.php 範本

<?php
// 確保狀態碼正確(Nginx + = 時可省略,保留更保險)
if (php_sapi_name() !== 'cli') {
    header("HTTP/1.1 404 Not Found");
    header("Status: 404 Not Found");
}
// 避免搜尋引擎收錄
header("X-Robots-Tag: noindex, nofollow");
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>404 - 頁面不存在</title>
</head>
<body>
    <h1>404 - 找不到頁面</h1>
    <p>您訪問的頁面可能已移除或網址輸入錯誤。</p>
    <a href="/"><- 返回首頁</a>
</body>
</html>

SEO 與使用者體驗建議

  • 回傳真實 404 狀態碼,避免軟 404(內容為 404 但狀態碼 200)影響 SEO。
  • 提供友善提示、網站地圖連結、搜尋框,降低跳出率。
  • 記錄 404 日誌(URL、Referer、UA),定期分析修復斷鏈。

掌握 Nginx error_page 404 = /404.php 與 PHP header("HTTP/1.1 404 Not Found") 雙重保障,確保 404 狀態碼正確傳遞給瀏覽器與搜尋引擎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved