2015-06-13 31 views
1

讓我們瞭解的情況:發送http-404響應但不發送IIS服務器中設置的自定義錯誤頁面| PHP

: - 使用PHP上的IIS 8.5 Web應用程序

: - 自定義錯誤頁設置爲404以下的網絡配置snippt:

<httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404" subStatusCode="-1" /> 
    <error statusCode="404" path="/path/404.php" responseMode="ExecuteURL" /> 
</httpErrors> 

: - 這是工作的不存在的頁面和IIS也返回這個404.php,如果我在任何PHP頁面設置標題爲404(通過header('HTTP/1.0 404 Not Found', true, 404); die;)。

問:

現在,我婉在一些PHP文件發送404 HTTP響應代碼在任何特定的條件下,可以說,如果數據庫返回0行。我可以通過設置上面的標題來做到這一點,但也會返回自定義錯誤頁面。 有沒有什麼辦法可以發送404代碼並告訴IIS發送響應,而不用發送自定義錯誤頁面呢?

問題:

: - 如果我刪除自定義錯誤頁,並把header()die()的內容,那麼它會滿足我的要求,但IIS將無法投放在頁面上自定義錯誤實際上不存在。

: - 我正在使用URL重寫,因此無法使用基於location標記的多個自定義錯誤頁面,並且不希望重定向到任何建議的不同URL。

回答

0

由於我有一個棘手的解決方案/想法,我想分享一下。但如果有人有更好的解決方案,我歡迎並感謝他們。

招數/解決方案/理念:

第1步: -從任何現有的PHP頁面設置session variable之前header('HTTP/1.0 404 Not Found', true, 404);和變量放在一個特定的信息(我建議使用不同整數代碼作爲不同php頁面的會話變量值)然後設置標題並致電die(); or exit;

第2步: -之後,IIS或任何其他服務器將執行自定義錯誤頁面。 SO,在自定義錯誤頁面檢查會話變量和回顯內容如下...

........ 2a - 如果會話變量未設置,則顯示「正常錯誤內容與主菜單 「等。

........ 2b - 如果設置了會話變量,則檢查值並根據值顯示您想向用戶顯示的不同內容,如:」未找到數據消息和搜索面板

注:在自定義錯誤頁面的編碼再次需要設置404頭,並且您可以根據上面的技巧中的會話變量的值發送不同的錯誤代碼。

相關問題