Задать вопрос
hell0w0rd
@hell0w0rd
Просто разработчик

Установка 404, в случае обращения к файлу?

При запросе к несуществующему файлу, запрос доходит до index.php и с этим надо что-то делать. На сколько правильное следующее решение:
private function process_request()
	{
		$request = strtolower($_SERVER['REQUEST_URI']);
		$query_string = strstr($request, '?');
		if( !empty($query_string) ){
			$request = str_replace($query_string, '', $request);
		}
		$ext = strstr($request, '.');
		$good_ext = array('.php', '.html', '.htm');
		if($ext===false){
			return $request;
		}elseif(in_array($ext, $good_ext)){
			$right_url = str_replace($ext, '', $request);
			$this->redirect($right_url);
		}else{
			$this->set_404();
		}
	}
	private function set_404()
	{
		if( !headers_sent() ){
			header('HTTP/1.1 404 Not Found');
			header('Status: 404 Not Found');
			exit();
		}else{
			Ylog('Headers have been sent!');
		}
	}
	private function redirect($page)
	{
		if( !headers_sent() ){
			header('HTTP/1.1 303 See Other');
			header('Location: '.$page);
			exit();
		}else{
			Ylog('Headers have been sent!');
		}
	}
  • Вопрос задан
  • 7009 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
@WEBIVAN
Судя по коду все что имеет extension отличный от '.php', '.html', '.htm' должно возвращать 404.
Не понимаю зачем его вообще доводить до php, почему бы его не обрезать на уровне .htaccess?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
akral
@akral
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
У функции header есть параметер для статуса, не нужно выдумывать свои решения:
header(' ', true, 404);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы