[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Отображать 404 ошибку,если неверные get-параметры
usr-php
Добрый день!
Есть сайт на php 5.6, хостинг на nic.ru (RU-CENTER) - структура каталогов на хостинге у nic.ru такая:
mysite.ru\docs - в этой папке хранится весь сайт.
mysite.ru\errordocs - хранятся html-страницы с ошибками, например mysite.ru\errordoc\404.html - страница, отображаемая пользователю, в случае возникновения 404 ошибки.

Стоит задача, если в строке запроса передано неверное значение параметра, то необходимо выводить пользователю 404 ошибку т.е. страницу 404.html. Как это сделать?
Например, если пользователь в браузере набрал неправильное значение параметра www.mysite.ru/art.php?art=unknownvalue выдавать 404-ошибку т.к. у параметра art значения могут быть только art1 и art2.

Ниже даю шаблон моей страницы
<html>
...
<body>
...
<div id="page">
...
<?
$art = $_GET['art'];
switch($art) :
default :
if(isset($art) {
//ЗНАЧЕНИЕ ПАРАМЕТРА НЕВЕРНО - необходимо вызвать 404-ошибки т.е. страницы errordoc/404.html на сервере
} else {
include_once('arts/artdef.php');
}
break;

case ("art1");
include_once('arts/art1.php');
break;

case ("art2");
include_once('arts/art2.php');
break;

endswitch;
?>
</div>

...
</body>
</html>
Kusss
Проверку нужно делать ДО вывода html верстки.
<?php
// Если пришел
if (isset($_GET['atr'])){

$atr = $_GET['atr'];
$attrArray = ['atr1','atr2'];

// проверка
if (!in_array($atr, $attrArray)) {
header('Location: /errordoc/404.html' );
die();
}
}


?>
<html>
....
usr-php
Цитата (Kusss @ 8.05.2019 - 11:50)
Проверку нужно делать ДО вывода html верстки.
...

Разместил код ниже перед тэгом <html> - выдается ошибка
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\mysite.ru\www\art.php:1) in Z:\home\mysite.ru\www\art.php on line 9

Что делаю не так? Может что-то в .htaccess добавить нужно?
<?php
if (isset($_GET['art'])){
$art = $_GET['art'];
$artArray = array("atr1", "atr2", "art3");
if (!in_array($art, $artArray)) {
/*header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");*/

header('Location: /errordocs/404.html');
die();
}
}

?>
Valick
@usr-php, каким текстовым редактором пользуетесь? Кодировка файла должна быть UTF-8 без BOM . И до <?php не должно быть никакого вывода в браузер, т.е. никаких букв или даже пробелов.
Ошибка означает, что был вывод в браузер перед установкой заголовка header. Судя по номеру строки в ошибке проблема как раз с кодировкой, и выводом непечатных символов BOM в браузер. На будущее никаких echo или print или какого либо кода вне тэгов <?php ?> ( включая js или html) не должно быть перед header. В подключаемых файлах тоже не должно быть ничего подобного. И кстати эта ошибка гуглится в течение трёх секунд.
И ещё совет, читайте книги.

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.