복붙노트

내 PHP 앱에서 404 오류를 보내지 않는 이유는 무엇입니까?

PHP

내 PHP 앱에서 404 오류를 보내지 않는 이유는 무엇입니까?

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

왜이 일을하지 않습니까? 나는 빈 페이지를 얻는다.

해결법

  1. ==============================

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

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

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

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

    404 헤더를 제공하는 것 외에도 PHP는 실제 404 페이지 출력을 담당합니다.

  2. ==============================

    2.

    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();
    }
    

    마지막 두 개의 에코 라인을 보면 콘텐츠를 볼 수 있습니다. 원하는대로 사용자 정의 할 수 있습니다.

  3. ==============================

    3.올바른 동작이므로 404 페이지의 내용을 만드는 것은 독자의 몫입니다. 404 헤더는 스파이더 및 다운로드 관리자가 파일이 존재하는지 확인하는 데 사용됩니다. (404 헤더가있는 페이지는 Google 또는 다른 검색 엔진에 의해 색인 생성되지 않습니다)

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

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

  4. ==============================

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

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

    <?php
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    header("Status: 404 Not Found");
    
    $_SERVER['REDIRECT_STATUS'] = 404;
    ?> <!-- 404 contents below this line -->
    
  5. ==============================

    5.기본 서버 404 페이지를로드합니다 (있는 경우). 아파치에 정의 :

    기본 서버 404 페이지를로드합니다 (있는 경우). 아파치에 정의 :

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

    6.PHP 5.4부터는 http_response_code (404)를 할 수 있습니다.

    PHP 5.4부터는 http_response_code (404)를 할 수 있습니다.

  7. ==============================

    7.@ Kitet 's에 기반한 또 다른 솔루션.

    @ Kitet 's에 기반한 또 다른 솔루션.

    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와 존재하지 않는 페이지를 구별 할 수 없습니다.

  8. ==============================

    8.함께 시도해보십시오.

    함께 시도해보십시오.

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

    안녕!

  9. ==============================

    9.조금 짧은 버전. 홀수 반향을 억제합니다.

    조금 짧은 버전. 홀수 반향을 억제합니다.

    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.");
    }
    
  10. ==============================

    10.

    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 문을 단순화하지 않고 위의 세미 콜론을 잊지 마십시오. 또한 페이지에서 substr을 실행하면 왜 우리는 쉽게 php_self를 실행할 수 있습니다

  11. ==============================

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

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

  12. ==============================

    12.약간의 정제 작업을 할 수는 있지만 제대로하고 있습니다. 그렇게 보였으므로 실용적인 응용 프로그램 이점을 말하자.

    약간의 정제 작업을 할 수는 있지만 제대로하고 있습니다. 그렇게 보였으므로 실용적인 응용 프로그램 이점을 말하자.

    다국어 기술 문서의 대규모 콜렉션을 가지고있는 우리의 오래된 웹 사이트는 if else 조건 내에서 이것을 실행하고있었습니다 :

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

    문제 (도움이되지 않는 메시지와 나쁜 사용자 경험 외에도)는 일반적으로 링크 크롤러 (우리의 경우 무결성)를 사용하여 잘못된 링크와 누락 된 문서를 체크합니다. 이것은 우리가 거기에 파일이 있다는 것을 알려주는 완벽하게 정확한 200 오류 응답을 얻지 못했다는 것을 의미합니다. 무결성 (Integrity)은 우리가 PDF를 기대하고 있다는 것을 몰랐기 때문에 404 헤더를 PHP로 수동으로 추가해야했습니다. 주사위 위에 코드를 추가하면 (이후에 아무 것도 실행되지 않고 헤더가 항상 렌더링 된 HTML 앞에 있어야하기 때문에), 무결성 (브라우저와 거의 비슷하게 동작 함)은 404를 반환하며 누락 여부를 정확히 알 수 있습니다 파일. 사용자에게 오류가 있음을 알리는보다 세련된 방법이 있지만 404 오류를 제공함으로써 브라우저 및 브라우저와 유사한 프로그램에 오류를 알리는 것만이 아니라 (틀렸다고 믿어줍니다.) 또한 서버 로그에 오류를 기록하여 404를 쉽게 grep 할 수 있습니다.

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

    13.이 시도:

    이 시도:

    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();
    }
    
  14. ==============================

    14.아시다시피, 내 웹 사이트에서 나는 이런 식으로 만들었습니다 :

    아시다시피, 내 웹 사이트에서 나는 이런 식으로 만들었습니다 :

            $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>");
    
    }
    

    나는 그것이 당신을 돕기를 바랍니다.

  15. ==============================

    15.나는이 문제에 다가 섰다. 나는 당신의 서버에 존재하지 않는 링크로 방향을 바꾸면 트릭을 할 수 있다고 생각한다. 서버는 자신의 404 : 헤더 ( 'Redirect abbb.404.nonexist'); 확실하지 않습니다.

    나는이 문제에 다가 섰다. 나는 당신의 서버에 존재하지 않는 링크로 방향을 바꾸면 트릭을 할 수 있다고 생각한다. 서버는 자신의 404 : 헤더 ( 'Redirect abbb.404.nonexist'); 확실하지 않습니다.

  16. ==============================

    16.서버의 기본 404 페이지를 표시하려면 다음과 같이 프레임에로드 할 수 있습니다.

    서버의 기본 404 페이지를 표시하려면 다음과 같이 프레임에로드 할 수 있습니다.

    echo '<iframe src="/something-bogus" width="100%" height="100%" frameBorder="0" border="0" scrolling="no"></iframe>';
    
  17. from https://stackoverflow.com/questions/437256/why-wont-my-php-app-send-a-404-error by cc-by-sa and MIT license