如何在PHP中顯示Apache的預設404頁面
我有一個需要處理URI的webapp,以查詢資料庫中是否存在一個頁面.使用.htaccess將URI指向應用程式時沒有問題:
Options +FollowSymlinks RewriteEngine on RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.*)$index.php?p=$1 [NC]
我的問題是,如果頁面不存在,我不想使用用PHP編寫的自定義404處理程式,我想要顯示預設的Apache 404頁面.當確定該頁面不存在時,是否有任何方式讓PHP手動執行回Apache?
對於上述情況,我知道的唯一可能的方法是在index.php中具有這種型別的php程式碼:
<?php if (pageNotInDatabase) { header('Location: ' . $_SERVER["REQUEST_URI"] . '?notFound=1'); exit; }
然後稍微修改你的.htaccess像這樣:
Options +FollowSymlinks -MultiViews RewriteEngine on RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{QUERY_STRING} !notFound=1 [NC] RewriteRule ^(.*)$index.php?p=$1 [NC,L,QSA]
這樣Apache將會為這個特殊情況顯示預設的404頁面,因為額外的查詢引數?notFound = 1,從php程式碼中新增,而在.htaccess頁面中的負數檢查與下一次不會轉發到index.php.
PS:像/ foo這樣的URI,如果在資料庫中找不到,瀏覽器中將會變成/ foo?notFound = 1.
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/5953096/how-to-display-apaches-default-404-page-in-php