Apache-2.4

url 中包含萬用字元時不顯示自定義 403 錯誤頁面

  • September 7, 2019

我一直在自定義我的 Apache 項目中的所有錯誤頁面。在出現 403 Forbidden Error 之前,一切似乎都很好。當我通過 URL 發送萬用字元(如空格或星號)時,不顯示自定義錯誤頁面。

http://localhost:8080/*

如果 403 錯誤是由其他原因引起的(例如訪問禁止的文件),則不會出現此錯誤,並且自定義錯誤頁面已正確載入。我的“.htaccess”程式碼是:

ErrorDocument 403 /index.php/%{REQUEST_URI}

有人有同樣的問題嗎?我該如何解決?我可以禁用特殊字元以避免該錯誤嗎?任何答案表示讚賞。

當我通過 URL 發送萬用字元(如空格或星號)時,不顯示自定義錯誤頁面。

另外: “空格”不是萬用字元,但如果請求的 URL 路徑以空格開頭(即%20當 URL 編碼時),那麼這確實是一個無效請求 - 請參見下面的 #1。

這裡有兩個問題…

  1. 如果URL 路徑中存在某些無效字元(例如,、、), Apache 將提前觸發 403 。在某些方面,這取決於作業系統。如果文件名中不允許該字元(根據底層作業系統),則當請求映射到文件系統時會觸發 403。*``:``"
  2. 這發生 .htaccess處理之前。因此,如果您定義了ErrorDocument 後期.htaccess則不會呼叫您的自定義錯誤文件。但是,如果您在伺服器配置(或 VirtualHost)中定義ErrorDocument 早期,則**應該呼叫它。

在旁邊:

ErrorDocument 403 /index.php/%{REQUEST_URI}

您不需要將請求的 URL 顯式傳遞給您的index.php腳本。在 PHP 中,這在$_SERVER['REDIRECT_URL']錯誤文件中的超全域中可用。

請注意,$_SERVER['REQUEST_URI']PHP 超全域變數不一定與名稱相似的REQUEST_URIApache 伺服器變數相同。PHP 變數包含查詢字元串,而 Apache 變數不包含。

引用自:https://serverfault.com/questions/981840