PHP $ _SERVER ('REQUEST_URI') показывает неожиданный результат (httpd.conf, ssl)

ПРИМЕЧАНИЕ. Я не системный администратор, поэтому мои знания и возможности редактировать файлы конфигурации системы несколько ограничены.

Сервер, который недавно перешел на полностью Https, не отображал нашу страницу 404, как это было до переключения.

Not Found

The requested URL /toh was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

На нашей странице httpd.conf у нас была строка

ErrorDocument 404 /admin/404/

Когда мы изменили эту строку на

ErrorDocument 404 https://example.com/admin/404/

вроде все нормально работает; ошибка «Не найдено» исчезла, и страница 404 отображалась правильно.

Тем не мение,

Эта страница 404 определяет, откуда пользователь изначально приходил, используя

$_SERVER['REQUEST_URI'];

Затем страница проверит базу данных, увидит, есть ли там этот URI, и затем перенаправит клиента на соответствующую страницу.

Так, например, если пользователь зашел на страницу из:

http://example.com/tacos

Если это недействительная ссылка, страница 404 увидит ссылку / tacos, найдет ее в базе данных и перенаправит пользователя туда, куда ему нужно перейти.

Теперь $ _SERVER ['REQUEST_URI'] только выплевывает

/admin/404

независимо от того, откуда пришел пользователь.

попробуйте поместить правила, которые заставляют веб-сайт использовать https в верхней части файла .htaccess, затем очистите кеш браузера и протестируйте его

Mohammed Elhag 16.03.2018 21:10

@Mohammed правила были установлены в файле .conf, а не в файле .htaccess. Но оказалось, что проблема (насколько я могу судить) заключалась в том, что RewriteEngine был выключен. Пожалуйста, посмотрите мой ответ, если хотите. Спасибо.

Ravioli87 16.03.2018 21:37

как насчет example.com/tacos, если ссылка недействительна, но с https обрабатывает ли веб-сервер ее так, как вы ожидали?

Mohammed Elhag 16.03.2018 21:46

@Mohammed: да, с включенными правилами перезаписи и удалением доменного имени из ErrorDocument, все работает так, как ожидалось, исходя из того, что я могу сказать

Ravioli87 16.03.2018 21:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
65
1

Ответы 1

Таким образом, очевидно, что проблема была двоякой:

1) Для этого потока здесь ссылка ErrorDocument не должна иметь доменного имени; он должен быть в формате

ErrorDocument 404 /admin/404

2) В файле .conf не было включено RewriteEngine; это было закомментировано. Итак, мы раскомментировали следующие правила

<VirtualHost 127.0.0.1:80>
    ...

#    RewriteEngine on
#    RewriteCond %{HTTP_HOST} ^example\.com [NC]
#    RewriteCond %{REQUEST_URI} /$ [NC]
#    RewriteRule ^(.*)/$ https://www.example.com/$1 [L,R=301]
    ...
    RedirectMatch permanent ^(.*)/$ https://www.example.com/$1

</VirtualHost>

Теперь страница 404 найдена и $ _SERVER (['REQUEST_URI']) имеет соответствующий ресурс.

Другие вопросы по теме