Apache-2.4
url 中包含萬用字元時不顯示自定義 403 錯誤頁面
我一直在自定義我的 Apache 項目中的所有錯誤頁面。在出現 403 Forbidden Error 之前,一切似乎都很好。當我通過 URL 發送萬用字元(如空格或星號)時,不顯示自定義錯誤頁面。
http://localhost:8080/*
如果 403 錯誤是由其他原因引起的(例如訪問禁止的文件),則不會出現此錯誤,並且自定義錯誤頁面已正確載入。我的“.htaccess”程式碼是:
ErrorDocument 403 /index.php/%{REQUEST_URI}
有人有同樣的問題嗎?我該如何解決?我可以禁用特殊字元以避免該錯誤嗎?任何答案表示讚賞。
當我通過 URL 發送萬用字元(如空格或星號)時,不顯示自定義錯誤頁面。
另外: “空格”不是萬用字元,但如果請求的 URL 路徑以空格開頭(即
%20
當 URL 編碼時),那麼這確實是一個無效請求 - 請參見下面的 #1。這裡有兩個問題…
- 如果URL 路徑中存在某些無效字元(例如,、、), Apache 將提前觸發 403 。在某些方面,這取決於作業系統。如果文件名中不允許該字元(根據底層作業系統),則當請求映射到文件系統時會觸發 403。
*``:``"
- 這發生在
.htaccess
處理之前。因此,如果您定義了ErrorDocument
後期,.htaccess
則不會呼叫您的自定義錯誤文件。但是,如果您在伺服器配置(或 VirtualHost)中定義ErrorDocument
早期,則**應該呼叫它。在旁邊:
ErrorDocument 403 /index.php/%{REQUEST_URI}
您不需要將請求的 URL 顯式傳遞給您的
index.php
腳本。在 PHP 中,這在$_SERVER['REDIRECT_URL']
錯誤文件中的超全域中可用。請注意,
$_SERVER['REQUEST_URI']
PHP 超全域變數不一定與名稱相似的REQUEST_URI
Apache 伺服器變數相同。PHP 變數包含查詢字元串,而 Apache 變數不包含。