Пользовательская страница ошибки 403 не отображается, если в URL-адресе есть подстановочные знаки

Я настраивал все страницы ошибок в моем проекте Apache. Все было в порядке, пока не появлялась 403 Forbidden Error. Когда я отправляю подстановочный знак через URL-адрес (например, пробел или звездочка), страница пользовательской ошибки не отображается.

http://localhost:8080/*

Если ошибка 403 вызвана другой причиной (например, доступ к запрещенному файлу), эта ошибка не появляется, а пользовательская страница ошибки загружена правильно. Мой код ".htaccess":

ErrorDocument 403 /index.php/%{REQUEST_URI}

У кого-нибудь есть такая же проблема? Как я могу ее решить? Могу ли я отключить специальные символы, чтобы избежать этой ошибки? Любой ответ приветствуется.

1
задан 7 September 2019 в 19:08
1 ответ

Когда я отправляю подстановочный знак через URL-адрес (например, пробел или звездочку), страница настраиваемой ошибки не отображается.

Кроме того: Пробел "не является подстановочным знаком , но если запрошенный URL-путь начинается с пробела (т. е. % 20 в кодированном URL), то это действительно неверный запрос - см. ниже № 1.

Здесь есть две проблемы ...

  1. Apache инициирует 403 ранний , если есть определенные недопустимые символы (например, * ], : , ") в URL-пути. В некоторых отношениях это зависит от ОС. Если символ не разрешен в именах файлов (в соответствии с базовой ОС), то 403 запускается, когда запрос отображается в файловую систему.

  2. Это происходит до обработки .htaccess . Таким образом, если вы определите ErrorDocument позднее в ] .htaccess , затем ваша пользовательская ошибка d окумент не называется. Однако, если вы определите ErrorDocument на ранней стадии в конфигурации сервера (или VirtualHost), тогда этот должен быть вызван .


Кроме того:

 ErrorDocument 403 / index.  php /% {REQUEST_URI}
 

Вам не нужно явно передавать запрошенный URL в ваш скрипт index.php . В PHP это доступно в суперглобальном $ _ SERVER ['REDIRECT_URL'] суперглобале из документа об ошибке.

Обратите внимание, что суперглобальный PHP $ _ SERVER ['REQUEST_URI'] PHP является не обязательно то же самое, что и переменная сервера Apache с аналогичным названием REQUEST_URI . Переменная PHP содержит строку запроса, а переменная Apache - нет.

0
ответ дан 4 December 2019 в 02:43

Теги

Похожие вопросы