自訂錯誤頁面

上次更新: 2023-11-18

AEM隨附處理HTTP錯誤的標準錯誤處理常式;例如,顯示:

標準錯誤訊息

若要回應錯誤,AEM會提供 404.jsp 下的指令碼 /libs/sling/servlet/errorhandler.

秘訣

由於AEM是以Apache Sling為基礎,因此提供進一步資訊 (位於Apache錯誤處理檔案中)。

注意

在作者執行個體上, CQ WCM偵錯篩選器 預設為啟用。 這會一律產生回應代碼200。 預設錯誤處理常式會透過將完整棧疊追蹤寫入回應來回應。

在發佈執行個體上,CQ WCM偵錯篩選器為 一直 已停用(即使設定為已啟用)。

如何自訂錯誤處理常式顯示的頁面

您可以開發自己的指令碼,以在發生錯誤時自訂錯誤處理常式顯示的頁面。 若要這麼做,請使用 AEM標準覆蓋機制 以便您的自訂頁面建立在 /apps 和覆蓋底下的預設頁面 /libs.

  1. 在存放庫中,複製預設指令碼:

    • /libs/sling/servlet/errorhandler/
    • /apps/sling/servlet/errorhandler/

    預設不存在目的地路徑,因此您必須在首次執行此動作時建立該路徑。

  2. 導覽至 /apps/sling/servlet/errorhandler。您可以在這裡執行下列任一操作:

    • 編輯適當的現有指令碼,以提供所需的資訊。 或
    • 建立和編輯所需程式碼的新指令碼。
  3. 儲存變更並測試。

注意

404.jsp Script是專為AEM驗證而設計,特別允許在出現這些錯誤時進行系統登入。

因此,應謹慎替換此指令碼。

自訂HTTP 500錯誤的回應

HTTP 500內部伺服器錯誤 表示伺服器端錯誤,例如伺服器遇到無法完成要求的非預期狀況。

當請求處理導致例外狀況時,Apache Sling架構(AEM建置在其上):

  • 記錄例外狀況
  • 並在回應內文中傳回:
    • HTTP回應代碼500
    • 例外狀況棧疊追蹤

作者: 自訂錯誤處理常式顯示的頁面 a 500.jsp 指令碼。 但是,它僅用於 HttpServletResponse.sendError(500) 會明確執行,也就是從例外狀況擷取器。

否則,回應代碼會設為500,但 500.jsp 指令碼不會執行。

若要處理500個錯誤,錯誤處理常式指令碼的檔案名稱必須與exception類別(或超級類別)相同。 若要處理所有此類例外,您可以建立指令碼 /apps/sling/servlet/errorhandler/Throwable.jsp/apps/sling/servlet/errorhandler/Exception.jsp.

注意

在AEM as a Cloud Service中,從後端收到5XX錯誤時,CDN會提供一般錯誤頁面。 若要允許後端的實際回應通過,您需要將以下標頭新增到回應中: x-aem-error-pass: true.
這僅適用於來自AEM或Apache/Dispatcher層的回應。 來自中繼基礎結構層的其他非預期錯誤仍會顯示一般錯誤頁面。

注意

在作者執行個體上, CQ WCM偵錯篩選器 預設為啟用。 這會一律產生回應代碼200。 預設錯誤處理常式會透過將完整棧疊追蹤寫入回應來回應。

對於自訂錯誤處理常式,需要具備程式碼500的回應,因此 必須停用CQ WCM偵錯篩選器. 這可確保傳回回應代碼500,這隨之會觸發正確的Sling錯誤處理常式。

在發佈執行個體上,CQ WCM偵錯篩選器為 一直 已停用(即使設定為已啟用)。

本頁內容