sourcecode

왜 내 PHP 앱이 404 오류를 보내지 않나요?

copyscript 2022. 9. 16. 23:03
반응형

왜 내 PHP 앱이 404 오류를 보내지 않나요?

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

왜 이게 안 되는 거죠?빈 페이지가 뜨네요.

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

물론 사용자는 여전히 SOL입니다.통상, 404 는 Web 서버에 의해서 처리됩니다.

  • 사용자: 이 URI 웹서버에 저한테 줄 게 있나요?
  • 웹 서버: 아니요, 404!여기 404에 대해 표시할 페이지가 있습니다.

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

  • 사용자: 이 URI 웹서버에 저한테 줄 게 있나요?
  • 웹 서버:네, PHP 페이지입니다.응답 코드가 무엇인지 알려줄 것입니다.
  • 이봐, OMG 404!!!!!!
  • 웹 서버:젠장, 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 페이지 로드(apache용으로 정의된 경우):

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

이제 php 5.4를 사용할 수 있습니다.

@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);

제어할 수 없는 서버에서 호스트하는 웹 사이트를 프로그래밍하는 경우, "404 missing.html" 파일이 무엇인지 알 수 없습니다.하지만 당신은 여전히 이것을 할 수 있습니다.

이 방법으로, 같은 서버상의 통상의 404 페이지와 같은 결과를 얻을 수 있었습니다.관찰자는 기존 PHP 페이지 반환 404와 존재하지 않는 페이지를 구별할 수 없습니다.

사용 방법:

header("Status: 404 Not Found");
header('HTTP/1.0 404 Not Found');

잘 가요

조금 더 짧게.홀수 에코를 억제합니다.

if (strstr($_SERVER['REQUEST_URI'],'index.php')){
  header('HTTP/1.0 404 Not Found');
  exit("<h1>404 Not Found</h1>\nThe page that you have requested could not be found.");
}
if($_SERVER['PHP_SELF'] == '/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.";
   die;
}

echo 문을 단순하게 하지 말고 위와 같은 세미콜론을 잊지 마세요.또, 페이지상에서 기판을 실행하는 이유도 간단하게 php_self를 실행할 수 있습니다.

서버의 기본 오류 페이지를 표시하려면 서버에서 이 작업을 처리해야 합니다.

정제가 좀 필요할 수도 있지만, 당신이 제대로 하고 있어요.이 문제는 해결된 것 같습니다.그럼 실용적인 어플리케이션의 이점에 대해 설명하겠습니다.

다국어 기술 문서를 다수 보유하고 있는 당사의 오래된 웹사이트는 다음과 같은 경우에 조건부로 이 작업을 수행하고 있었습니다.

    if (<no file found>){
        die("NO FILE HERE");
    }

문제는 (도움이 되지 않는 메시지와 잘못된 사용자 경험을 제외하고) 일반적으로 링크 크롤러를 사용하여 잘못된 링크와 누락된 문서를 체크한다는 것입니다.이는 파일이 있다는 것을 알려주는 오류 없이 완벽하게 200개의 응답을 받고 있음을 의미합니다.Integrity는 PDF가 필요한 것을 몰랐기 때문에 php를 사용하여 404 헤더를 수동으로 추가해야 했습니다.die 위에 코드를 추가함으로써(그 후는 아무것도 실행되지 않고 헤더는 항상 렌더링된 html 앞에 있어야 하기 때문에), 무결성(브라우저와 비슷하게 동작)은 404를 반환하고 누락된 파일을 정확히 찾을 수 있습니다.사용자에게 오류가 있음을 알리는 보다 우아한 방법이 있지만, 404 오류를 처리함으로써 브라우저 및 브라우저와 같은 프로그램에 오류를 알릴 뿐만 아니라 (잘못된 경우 수정해 주세요) 서버 로그에 이러한 오류를 기록하여 404초 동안 쉽게 grep할 수 있습니다.

    header('HTTP/1.0 404 Not Found');
    die("NO FILE HERE");

이것을 시험해 보세요.

if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
    header('HTTP/1.0 404 Not Found');
    echo "<head><title>404 Not Found</title></head>";
    echo "<h1>Not Found</h1>";
    $uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    echo "<p>The requested URL ".$uri." was not found on this server.</p>";
    exit();
}

제 웹사이트에서 이런 걸 만들었죠

        $uri=$_SERVER['REQUEST_URI'];
        $strpos=strpos($uri, '.php');
        if ($strpos!==false){
        $e404="The page requested by you: &quot".$_SERVER['REQUEST_URI']."&quot, doesn't exists on this server.";
        $maybe=str_replace('.php','',$uri);
        $maybe=str_replace('/','',$maybe);
        die("<center><h1>404</h1><hr><h3>$e404</h3><h3>Maybe try <a href=$maybe>www.leaveyortexthere.p.ht/$maybe</a>?</center>");

}

도움이 됐으면 좋겠네요

나는 이 문제를 알게 되었다.서버상의 존재하지 않는 링크로 리다이렉트 하는 것이 효과가 있다고 생각합니다.404번
header('Redirect abbb.404.nonexist');<은 없다>

서버의 기본 404 페이지를 표시하는 경우 다음과 같은 프레임으로 로드할 수 있습니다.

echo '<iframe src="/something-bogus" width="100%" height="100%" frameBorder="0" border="0" scrolling="no"></iframe>';

언급URL : https://stackoverflow.com/questions/437256/why-wont-my-php-app-send-a-404-error

반응형