簡體   English   中英

發送http-404響應但不發送IIS服務器中設置的自定義錯誤頁面 PHP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM