Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
21 / 10 / 4
Регистрация: 02.04.2015
Сообщений: 779

Настройка вывода ошибки на сервере (страница не существует)

28.09.2021, 11:43. Показов 1268. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую!
Есть такая проблема.

Нужно чтобы адреса страниц, которые находятся в БАН листе, отдавали код ошибки


Есть такой код в файле index.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
$file_user_ban = file('file_user_ban.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$user_ban = empty($_GET['user']) ? '' : $_GET['user'];
 
/*
  проверяем наличие строки user_ban в массиве file_user_ban.
*/
if(in_array($user_ban, $file_user_ban)) {
  // есть совпадение с одним из бан-слов в бан-листе. редиректим на 404.html
   header('Location: /404.html');
}
 
$user = $_GET['user']?$_GET['user']:"1"; // например /index.php?user=156756
В текстовике file_user_ban.txt
у меня находятся запись
156756
и таких записей может быть много (каждая запись с новой строки).

Теперь если перейти по ажресу
domen.ru/index.php?user=156756
произойдет редирект на страницу domen.ru/404.html все работает.

ВОПРОС в том как теперь мне сделать чтобы серевер отдавал ошибку 403 или 404.

Потому как если сейчас через терминал выполнить команду
wget https://domen.ru/index.php?user=156756
отдает код 200 ОК



Как мне реализовать чтобы сервер отдавал любую из этих ошибок (403, 404).

Что нужно дописать в коде страницы index.php и файле .htaccess ?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.09.2021, 11:43
Ответы с готовыми решениями:

Настройка вывода нуля вместо игнорирования вывода отсутствующих запросов
Доброго всем дня! Есть скрипт, который выводит дату, далее через пробел час суток и в другом столбце количество пользователей,...

Сформированная страница на сервере
Всем здрасте, подскажите как правильно подгрузить страницу сформированную на сервере? Я делаю это так. Но проблемка в том что потом...

Не отображается страница на сервере
Зарегался на сайте (просто посмотреть зарегался, что это такое), FreeServer4You называется. Пишут, что все бесплатно.... Ок. Сразу там в...

7
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
28.09.2021, 12:00
Нужно прямо на месте отдавать 404-статус и выводить HTML-код из файла 404.html, а не перенаправлять на другой адрес.
0
21 / 10 / 4
Регистрация: 02.04.2015
Сообщений: 779
28.09.2021, 12:07  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Нужно прямо на месте отдавать 404-статус и выводить HTML-код из файла 404.html, а не перенаправлять на другой адрес.
Пожалуйста приведите пример, как это реализовать для урл https://domen.ru/index.php?user=156756
0
1306 / 781 / 190
Регистрация: 19.09.2020
Сообщений: 1,993
28.09.2021, 12:18
Лучший ответ Сообщение было отмечено serauto79 как решение

Решение

Как сказано выше 404 надо отдавать именно по текущему URL иначе как, например, робот поисковой системы поймет какая страница отсутствует? Да и человек тоже.

Вот тут всё написано как корректно https://www.php.net/manual/ru/function.header.php

404 можно отдавать вообще без контента, но с текущим URL.

Добавлено через 10 минут
Цитата Сообщение от serauto79 Посмотреть сообщение
Пожалуйста приведите пример, как это реализовать для урл https://domen.ru/index.php?user=156756
Да просто

PHP
1
2
3
4
5
6
7
if(in_array($user_ban, $file_user_ban)) {
 
  // есть совпадение с одним из бан-слов в бан-листе, отдаем 404
   header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
   echo 'Фигвам, а не страница'; // require_once ('/404.html');
   die();
}
Правильнее, конечно, отдачу контента или ошибок делать где-то после всех вычислений.

P.S: Перед отдачей header не должно выводиться ничего! Ни единого байта.
1
21 / 10 / 4
Регистрация: 02.04.2015
Сообщений: 779
28.09.2021, 12:34  [ТС]
заменил
header('Location: /404.html');
на
header("HTTP/1.1 404 Not Found");

теперь ответ 404 как нужно
но страница открывается с контентом, а нужно чтобы была открывалася страница 404.html и код ошибки был 404
Либо страница была прежней https://domen.ru/index.php?user=156756 но на ней не отображался контент вообще.

Добавлено через 8 минут
Цитата Сообщение от KingdaKa Посмотреть сообщение
Правильнее, конечно, отдачу контента или ошибок делать где-то после всех вычислений.
Спасибо большое, как раз то что нужно!
0
1306 / 781 / 190
Регистрация: 19.09.2020
Сообщений: 1,993
28.09.2021, 12:41
Цитата Сообщение от serauto79 Посмотреть сообщение
но страница открывается с контентом
Так после header значит скрипт продолжает работу, а должен останавливаться как я показал пример выше
0
21 / 10 / 4
Регистрация: 02.04.2015
Сообщений: 779
28.09.2021, 12:44  [ТС]
продолжает работу если сменить только
header('Location: /404.html');
на
header("HTTP/1.1 404 Not Found");


а если так

if(in_array($user_ban, $file_user_ban)) {

// есть совпадение с одним из бан-слов в бан-листе, отдаем 404
header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
echo 'Фигвам, а не страница'; // require_once ('/404.html');
die();
}

то все ок

die(); обрывает работу, спасибо.
0
1306 / 781 / 190
Регистрация: 19.09.2020
Сообщений: 1,993
28.09.2021, 12:48
https://www.php.net/manual/ru/function.die.php

Если надо, то можно короче

die ('Фигвам, а не страница');
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.09.2021, 12:48
Помогаю со студенческими работами здесь

Как узнать существует ли страница?
Загружаю страницы из заранее созданного списка, и если страницы не существует то программа критует, пишет 404 нот фоунд, как этого...

Заголовок, что страница не существует
есть такая ситуация странице передается переменая если ета переменая больше определеного значения надо отправить заголовок, что страница...

Запрашиваемая страница не найдена на сервере
Я обычно так делаю. Редактирую файл, сохраняю. Потом запрашиваю страницу в браузере. Так вот, иногда всё работает, а иногда выдаёт такую...

Существует ли файл на сервере?
Собственно сабж. Как имея путь и имя файла определить его существование на удаленном сервере с помощью QFtp? Дело в том, что, когда я качаю...

Ошибка 404, а ведь страница существует !
Здравствуйте! Помогите разобраться. Я хочу получить код страницы: startUrl = ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru