[英]Send http-404 response BUT dont send custom error page setted in IIS server | PHP
讓我們了解場景:
:-在IIS 8.5上將PHP用於Web應用程序
:-使用以下Web配置片段為404設置了一個自定義錯誤頁面:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/path/404.php" responseMode="ExecuteURL" />
</httpErrors>
:-這適用於不存在的頁面,如果我在任何PHP頁面中將header設置為404(通過header('HTTP/1.0 404 Not Found', true, 404); die;
),則IIS也會返回此404.php。
題:
現在,我希望在任何特定條件下在某些php文件中發送404 http響應代碼,可以說數據庫是否返回0行。 我可以通過如上所述設置標頭來做到這一點,但這也會返回自定義錯誤頁面。 有什么方法可以發送404代碼並告訴IIS照原樣發送響應,而無需發送自定義錯誤頁面?
問題:
:-如果刪除自定義錯誤頁面並將內容放在header()
和die()
則它將滿足我的要求,但是IIS將無法在實際上不存在的頁面上提供自定義錯誤。
:-我正在使用URL重寫,因此不能使用基於location
標記的多個自定義錯誤頁面,並且不想重定向到任何建議的其他URL。
因為我有一個棘手的解決方案/想法,所以我也想分享一下。 但是,如果有人有更好的解決方案,我歡迎並感謝他們。
招/解決方案/理念:
步驟1:-從任何現有的php-page設置一個在
header('HTTP/1.0 404 Not Found', true, 404);
之前的session variable
header('HTTP/1.0 404 Not Found', true, 404);
並在該變量中放置一條特定的消息(我建議使用不同的整數代碼作為不同php頁面的會話變量的值)然后設置標頭並調用die(); or exit;
die(); or exit;
。步驟2:-之后,IIS或任何其他服務器將執行自定義錯誤頁面。 因此,在自定義錯誤頁面中,檢查會話變量並按如下所示回顯內容。
........ 2a-如果未設置會話變量,則顯示“ 帶有主菜單的正常錯誤內容 ”等。
........ 2b-如果設置了會話變量,則檢查該值,並根據該值顯示要向用戶顯示的不同內容,例如:“ 未找到數據消息和搜索面板 ”
注意:在自定義錯誤頁面的編碼中,您再次需要設置404標頭,此外,您還可以根據上述技巧中會話變量的值發送不同的錯誤代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.