[php] PHP 앱이 404 오류를 보내지 않는 이유는 무엇입니까?

if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
    header('HTTP/1.0 404 Not Found');
}

왜 이것이 효과가 없을까요? 빈 페이지가 나타납니다.



답변

코드가 기술적으로 정확합니다. 빈 페이지의 헤더를 보면 404 헤더가 표시되며 다른 컴퓨터 / 프로그램은 응답을 파일을 찾을 수 없음으로 올바르게 식별 할 수 있습니다.

물론 사용자는 여전히 SOL입니다. 일반적으로 404는 웹 서버에서 처리합니다.

  • User :이 URI 웹 서버에 저에게 필요한 것이 있습니까?
  • 웹 서버 : 아니요, 404입니다! 다음은 404에 표시 할 페이지입니다.

문제는 일단 웹 서버가 PHP 페이지 처리를 시작하면 404를 처리 할 지점을 이미 통과 한 것입니다.

  • User :이 URI 웹 서버에 저에게 필요한 것이 있습니까?
  • 웹 서버 : 예. PHP 페이지입니다. 응답 코드가 무엇인지 알려줍니다.
  • PHP : 야, OMG 404 !!!!!!!
  • Webserver : 404 페이지의 사람들이 이미 집에 돌아 왔기 때문에 PHP가 나에게 준 것을 보내겠습니다.

PHP는 404 헤더를 제공 할뿐만 아니라 실제 404 페이지를 출력합니다.


답변

if (strstr($_SERVER['REQUEST_URI'],'index.php')){
    header('HTTP/1.0 404 Not Found');
    echo "<h1>404 Not Found</h1>";
    echo "The page that you have requested could not be found.";
    exit();
}

마지막 두 개의 반향 선을 보면 내용이 표시됩니다. 원하는대로 사용자 정의 할 수 있습니다.


답변

이것이 올바른 행동 입니다. 404 페이지의 컨텐츠를 작성하는 것은 사용자의 책임입니다.
404 헤더는 스파이더 및 다운로드 관리자가 파일이 존재하는지 확인하는 데 사용됩니다.
(404 헤더가있는 페이지는 Google 또는 다른 검색 엔진에 의해 색인이 생성되지 않습니다)

그러나 일반 사용자는 http- 헤더를 보지 않고 해당 페이지를 일반 페이지로 사용합니다.


답변

레코드의 경우 이것은 모든 경우 처리기입니다.

<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");

$_SERVER['REDIRECT_STATUS'] = 404;
?> <!-- 404 contents below this line -->


답변

기본 서버 404 페이지를로드하십시오 (예 : 아파치에 대해 정의 된 경우).

if(strstr($_SERVER['REQUEST_URI'],'index.php')){
  header('HTTP/1.0 404 Not Found');
  readfile('404missing.html');
  exit();
}


답변

PHP 5.4부터는 이제 할 수 있습니다 http_response_code(404);


답변

@Kitet를 기반으로 한 또 다른 솔루션.

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");

$_SERVER['REDIRECT_STATUS'] = 404;
//If you don't know which web page is in use, use any page that doesn't exists
$handle = curl_init('http://'. $_SERVER["HTTP_HOST"] .'/404missing.html');
curl_exec($handle);

제어 할 수없는 서버에서 호스팅되는 웹 사이트를 프로그래밍하는 경우 “404missing.html”파일을 알 수 없습니다. 그러나 여전히이 작업을 수행 할 수 있습니다.

이러한 방식으로 동일한 서버에서 일반 404 페이지와 동일한 결과를 제공했습니다. 관찰자는 기존 PHP 페이지 리턴 404와 존재하지 않는 페이지를 구별 할 수 없습니다.