Я настраивал все страницы ошибок в моем проекте 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
тогда ваш настраиваемый документ об ошибке не вызывается. Однако если вы определите ErrorDocument
рано в конфигурации сервера (или VirtualHost), тогда это должен позвоните.
В стороне:
ErrorDocument 403 /index.php/%{REQUEST_URI}
Вам не нужно явно передавать запрошенный URL на ваш index.php
сценарий. В PHP это доступно в $_SERVER['REDIRECT_URL']
суперглобальный из документа об ошибке.
Обратите внимание, что $_SERVER['REQUEST_URI']
PHP superglobal не обязательно то же самое, что и одноименный REQUEST_URI
Переменная сервера Apache. Переменная PHP содержит строку запроса, а переменная Apache - нет.