Я настраивал все страницы ошибок в моем проекте Apache. Все было в порядке, пока не появлялась 403 Forbidden Error. Когда я отправляю подстановочный знак через URL-адрес (например, пробел или звездочка), страница пользовательской ошибки не отображается.
http://localhost:8080/*
Если ошибка 403 вызвана другой причиной (например, доступ к запрещенному файлу), эта ошибка не появляется, а пользовательская страница ошибки загружена правильно. Мой код ".htaccess":
ErrorDocument 403 /index.php/%{REQUEST_URI}
У кого-нибудь есть такая же проблема? Как я могу ее решить? Могу ли я отключить специальные символы, чтобы избежать этой ошибки? Любой ответ приветствуется.
Когда я отправляю подстановочный знак через URL-адрес (например, пробел или звездочку), страница настраиваемой ошибки не отображается.
Кроме того: Пробел "не является подстановочным знаком , но если запрошенный URL-путь начинается с пробела (т. е. % 20
в кодированном URL), то это действительно неверный запрос - см. ниже № 1.
Здесь есть две проблемы ...
Apache инициирует 403 ранний , если есть определенные недопустимые символы (например, *
], :
, "
) в URL-пути. В некоторых отношениях это зависит от ОС. Если символ не разрешен в именах файлов (в соответствии с базовой ОС), то 403 запускается, когда запрос отображается в файловую систему.
Это происходит до обработки .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 - нет.