2 / 2 / 0
Регистрация: 30.08.2017
Сообщений: 64

Не работает get-запрос на сервере, выдает 404 ошибку

10.06.2023, 15:45. Показов 1974. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Не работают GET-запросы, на встроенном PHP-сервере работают, а на хостинге - нет.
В index.php у меня основная и единственная точка входа.
Есть страница second_page и некоторые другие, которые можгут обрабатывать как GET, так и POST-запросы.
Для этого в index.php у меня есть код:
PHP
1
2
3
4
5
6
7
*******
if ($_SERVER['REQUEST_URI'] == '/second_page') {
    require ('../second_page.php');
} elseif ($_SERVER['PATH_INFO'] == '/second_page') {
    require ('../second_page.php');
}
*******
На встроенном сервере все работает, т.е. http://localhost:8000/second_page?ChangeID=5 работает,
в коде страницы я все могу получить.
PHP
1
2
3
4
if (isset($_GET['ChangeID']))
{
*******
}
А на хостинге это не работает...
Гугл подсказывает, что нужно что-то прописать в .htaccess, и все проблемы из-за него.
А какую команду - я не нашел. Буду рад любой помощи.
P.S. Не знаю, в том ли разделе создал тему. Ковыряюсь в документации по Апачу, а найти не могу ответ. Вообще не знаю, в Апаче тут дело?
https://httpd.apache.org/docs/... _host.html
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2023, 15:45
Ответы с готовыми решениями:

Запрос на обновление товара выдает 404 ошибку
написал на php запрос mysql: if(isset($_POST)){ $name_r = $_POST; $desc_r = $_POST; $price_r = $_POST; $pic_r = $_FILES; $id =...

Ajax запрос не работает, но ошибку не выдает
Здравствуйте недавно начал изучать Аjax. (Основи Javascript знаю, jQuery тоже) В уроке который прохожу автор предлагает использовать Аjax...

Подключение к Angular проекту Three.js вызывает ошибку сервере 404
Здравствуйте, Есть небольшая проблемка... Проект на Angular в среде MS VS2017. Проблема с подключением библиотеки Three.js. Вроде все...

30
2 / 2 / 0
Регистрация: 30.08.2017
Сообщений: 64
11.06.2023, 14:10  [ТС]
Студворк — интернет-сервис помощи студентам
Аа, т.е. с помощью parse_url определить параметры, затем с помощью parse_str получить массив с ними, затем, если это массив, не null, не пустой, если в нем есть ID, то поместить значение в $_GET['ID']б если есть Page, то значние в $_GET['Page'] и т.д. а уже потом
PHP
1
require ('../second_page.php');
0
1460 / 1013 / 232
Регистрация: 01.10.2018
Сообщений: 3,951
11.06.2023, 14:19
$_GET автоматически доступен (упомянутые функции не нужны). А выделить путь можно проще - это адрес запроса до первого вопросительного знака.
0
943 / 559 / 299
Регистрация: 07.11.2022
Сообщений: 923
11.06.2023, 14:26
Цитата Сообщение от boobie Посмотреть сообщение
А есть функция, что сделает это за меня? В смсле - распарсит строку
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
$url = 'https://www.youtube.com/watch?v=H4zOQz8vs4c&t=528';
 
parse_str(parse_url($url, PHP_URL_QUERY), $parameters);
print_r($parameters);
/*
Array
(
    [v] => H4zOQz8vs4c
    [t] => 528
)
*/
?>
1
1460 / 1013 / 232
Регистрация: 01.10.2018
Сообщений: 3,951
11.06.2023, 14:26
Где начинать обрабатывать параметры, во фронт-контроллере или непосредственно в контроллере, решайте сами. Обычно общие однотипные действия выносят во фронт-контроллер. Например, можно проверить все подряд параметры на скалярность (is_scalar) во фронт-контроллере, а существование необходимых параметров - в конкретном контроллере.
1
2 / 2 / 0
Регистрация: 30.08.2017
Сообщений: 64
11.06.2023, 14:26  [ТС]
Просто раз у меня в index.php подключение 15 страниц в зависимости от $_SERVER['REQUEST_URI'], то я последним шагом проверю, есть ли в $_SERVER['REQUEST_URI'] имя страницы + параметры.
PHP
1
2
3
4
5
6
7
8
9
10
<?php
if ($_SERVER['REQUEST_URI'] == '/') {
    require ('../mainpage.php');
} elseif ($_SERVER['REQUEST_URI'] == '/index') {
    require ('../mainpage.php');
} elseif ($_SERVER['REQUEST_URI'] == '/second_page') {
    require ('../second_page.php');
}else {
    require('../page404.php');
}
Цитата Сообщение от estic Посмотреть сообщение
$_GET автоматически доступен (упомянутые функции не нужны).
Или Вы предлагаете какой-то другой способ, которого я до сих пор не понял? (обожаю эти смайлики)
0
1460 / 1013 / 232
Регистрация: 01.10.2018
Сообщений: 3,951
11.06.2023, 14:37
Цитата Сообщение от boobie Посмотреть сообщение
Или Вы предлагаете какой-то другой способ, которого я до сих пор не понял?
Вы написали в теме, что пока хотите использовать для передачи идентификатора обычный GET-параметр (т.е. в query string). Такие параметры автоматически доступны в $_GET. Но с путем вы в любом случае работаете, чтобы выполнять маршрутизацию. Для этого нужно получить из адреса путь (для описанного мной варианта 1), убрав все лишнее. Достаточно оставить '' (пустую строку для главной и т.п.), 'second_page', etc.
1
2 / 2 / 0
Регистрация: 30.08.2017
Сообщений: 64
11.06.2023, 14:46  [ТС]
estic,
Ого, я толлько сейчас понял, что все уже в $_GET-е.
Мне остается только выяснить, какую страницу открывать
PHP
1
2
print_r($_GET);//выдал все параметры
require('../page404.php');
Все! Огромное спасибо, проблема решена!
0
1460 / 1013 / 232
Регистрация: 01.10.2018
Сообщений: 3,951
11.06.2023, 14:54
Цитата Сообщение от boobie Посмотреть сообщение
Ого, я толлько сейчас понял, что все уже в $_GET-е.
Ну, я всего лишь два раза вам об этом написал Изучайте справочник. Найдите учебник.

Добавлено через 1 минуту
Цитата Сообщение от estic Посмотреть сообщение
Достаточно оставить '' (пустую строку для главной и т.п.), 'second_page', etc.
PHP
1
2
3
4
5
6
7
8
9
list($path) = explode('?', $_SERVER['REQUEST_URI'], 2);
 
$pathx = trim($path, '/');
 
if (array_key_exists($pathx, $routes)) {
    require PATH. $routes[$pathx].'.php';
} else {
    error(404);
}
1
2 / 2 / 0
Регистрация: 30.08.2017
Сообщений: 64
11.06.2023, 15:08  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
Ну, я всего лишь два раза вам об этом написал
Мне очень стыдно

Добавлено через 14 минут
Я сделал так в index.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
$url =  "//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
$page_name = parse_url($url,  PHP_URL_PATH);
if ($_SERVER['REQUEST_URI'] == '/') {
    require ('../mainpage.php');
} elseif ($page_name  == '/index') {
    require ('../mainpage.php');
} elseif ($page_name  == '/second_page') {
    require ('../second_page.php');
} else {
    require('../page404.php');
}
Т.е. там, где предполагается GET-запрос, поменял $_SERVER['REQUEST_URI'] на $page_name
Все, вроде, заработало.
0
1460 / 1013 / 232
Регистрация: 01.10.2018
Сообщений: 3,951
11.06.2023, 15:20
В REQUEST_URI нет схемы, хоста и т.п. Это не адрес запроса для прокси.

Так что parse_url может вводить в заблуждение или даже вызывать ошибку

Добавлено через 5 минут
Или вы всегда будете добавлять к REQUEST_URI префикс //host?
0
2 / 2 / 0
Регистрация: 30.08.2017
Сообщений: 64
11.06.2023, 16:41  [ТС]
Вроде как в мануалах пишут, что
PHP
1
$url =  "//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
Всегда дает полную ссылку.

Хорошо, поставлю Ваш код!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2023, 16:41

Не работает sql запрос выдает ошибку Date' is not a recognized built-in function name
SELECT Фамилия, Имя, Отчество, Должность, Телефон, Дата,Пароль ,Фото ...

Не работает sql запрос выдает ошибку Date' is not a recognized built-in function name
select Фамилия, Имя, Отчество, Должность, Телефон, Дата,Пароль ,Фото ...

Почему NGINX на сервере с Linux выдает 502 ошибку, в то время как без NGINX все работает?
Приложение работает на express.js + socket.io + redis + mysql. Выложил сайт на тестирование на qa-стенд (14.x ubuntu server). На убунте...

Location выдает ошибку 404
Папка с файлом теперь в названии содержит символы _ и # location выдает ошибку 404. Путь правильный, из php по include срабатывает...

GET параметр выдает ошибку 404
Подскажите, как мне работать с Get параметром в Ajax. $.ajax({ url:&quot;select_depart.php&quot;, type: &quot;get&quot;, data:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru