PHP에서 오류 404를 생성하려면 어떻게해야합니까?


111

내 .htaccess는 모든 요청 /word_here/page.php?name=word_here. 그런 다음 PHP 스크립트는 요청 된 페이지가 페이지 배열에 있는지 확인합니다.

그렇지 않은 경우 오류 404를 어떻게 시뮬레이션 할 수 있습니까? 나는이 시도하지만 통해 구성 내 404 페이지가 표시되지 않은 ErrorDocument.htaccess게재.

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

내 오류 404 페이지로 리디렉션하는 것이 잘못되었다고 생각하는 것이 맞습니까?


작동하지 않는 이유는 무엇입니까? 서버 응답 헤더를 확인 했습니까?
Gumbo

1
결론 질문에 대한 대답으로, 예, 모든 404를 실제 페이지로 리디렉션하는 것은 좋지 않습니다. 이것은 거기에 있으면 안되는 것을 거기에있는 것으로 바꾸어 HTTP 사양을 위반합니다.
Lucas Oman

답변:


157

404 페이지 생성에 대한 최신 답변 (PHP 5.4 이상 기준)은 다음을 사용하는 것입니다 http_response_code.

<?php
http_response_code(404);
include('my_404.php'); // provide your own HTML for the error page
die();

die() 꼭 필요한 것은 아니지만 정상적인 실행을 계속하지 않도록합니다.


이 파일을 어떤 파일에 추가해야합니까?
Julfikar

87

수행중인 작업이 작동하고 브라우저에 404 코드가 수신됩니다. 무엇이 되지 않습니다 할 것은 당신이 예를 들어, 예상 할 수 있다는 "을 (를) 찾을 수 없습니다"페이지를 표시 할 수 있습니다 :

찾을 수 없음

요청한 URL /test.php를이 서버에서 찾을 수 없습니다.

PHP가 404 코드를 반환 할 때 웹 서버가 해당 페이지를 보내지 않기 때문입니다 (적어도 Apache는 그렇지 않습니다). PHP는 모든 자체 출력을 전송합니다. 따라서 유사한 페이지를 원하면 HTML을 직접 보내야합니다. 예 :

<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
include("notFound.php");
?>

httpd.conf에 입력하여 자체 404 메시지에 대해 동일한 페이지를 사용하도록 Apache를 구성 할 수 있습니다.

ErrorDocument 404 /notFound.php

감사. 내 404 페이지를 사용했다고 가정했습니다.
Eric

@JW 위의 코드는 어디에 사용됩니까? '.htaccess'파일에 대한 코드입니다.
Manohar Kumar

@ManoharKumar 위의 코드는 404 페이지를 보내고 싶은 곳에서 사용합니다. 제 경우에는 누군가가 코드로 항목을 검색 할 때 사용했지만 존재하지 않습니다. 그래서 나는 항목을 사용할 수 없다는 것을 알게 된 후 위의 코드를 사용하고 404 페이지 이후에 아무것도로드하지 않도록이 코드의 세 번째 줄에서도 exit를 사용했습니다. 감사합니다 JW, 그것은 나를 위해 잘 작동했습니다.
Harsha

22

이 시도:

<?php
header("HTTP/1.0 404 Not Found");
?>

3
404는 HTTP 1.0과 1.1 모두에서 404입니다. 1.0은 안전한 내기입니다. 멋진 농담 BTW :) +1
Ates Goral

제 경우에는 header ( "Location : HTTP / 1.0 404 Not Found");
EasyLearn 아카데미

9

.htaccess 파일을 통해 사용자 지정 오류 페이지 만들기

1. 404-페이지를 찾을 수 없음

 RewriteEngine On
 ErrorDocument 404 /404.html

2. 500-내부 서버 오류

RewriteEngine On
ErrorDocument 500 /500.html

3. 403-금지됨

RewriteEngine On
ErrorDocument 403 /403.html

4. 400-잘못된 요청

RewriteEngine On
ErrorDocument 400 /400.html

5. 401-인증 필요

RewriteEngine On
ErrorDocument 401 /401.html

모든 오류를 단일 페이지로 리디렉션 할 수도 있습니다. 처럼

RewriteEngine On
ErrorDocument 404 /404.html
ErrorDocument 500 /404.html
ErrorDocument 403 /404.html
ErrorDocument 400 /404.html
ErrorDocument 401 /401.html

RewriteEngine은 이와 관련이 없습니다. 해당 줄은 동일한 결과를 얻기 위해 안전하게 생략 할 수 있습니다.
WoodrowShigeru

3

헤더를 보낸 후 die ()를 기억 했습니까? 404 헤더는 처리를 자동으로 중지하지 않으므로 추가 처리가 발생하면 아무 작업도 수행하지 않은 것처럼 보일 수 있습니다.

404 페이지로 리디렉션하는 것은 좋지 않지만 문제없이 콘텐츠를 포함 할 수 있습니다. 이렇게하면 올바른 URL에서 404 상태를 제대로 전송하는 페이지가 있지만 "무엇을 찾고 있습니까?"라는 메시지도 표시됩니다. 인간 독자를위한 페이지.


0

넣어보십시오

ErrorDocument 404 /(root directory)/(error file) 

에서 .htaccess파일.

오류에 대해이 작업을 수행하되 오류를 404로 대체하십시오.


0

Drupal 또는 Wordpress CMS (및 기타)에서 일부 사용자 지정 PHP 코드가 존재하지 않는 것처럼 보이게하려면 (일부 조건이 충족되지 않는 한) 다음이 CMS의 404 처리기를 인수하여 잘 작동합니다.

<?php
  if(condition){
    do stuff;
  } else {
    include('index.php');
  }
?>

-2

해당 줄 바로 다음에 exit또는 사용하여 응답을 닫으십시오.die()

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

또는

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

1
이렇게하면 사용자에게 빈 페이지가 표시됩니다. 내 질문은 내가 지정한 것과 동일한 404 페이지를 ErrorDocumentPHP에서 보내는 방법이었습니다 .
에릭

ErrorDocument를 사용하려는 경우 사용자 정의 오류 파일의 경로가 서버 예제의 루트와 관련되어 있는지 확인하십시오. 가상 경로가 서버의 루트에서 / folder1 / folder2 / myhtaccess라고 말하면 오류 문서는 다음과 같습니다. 작성한 ErrorDocument 404 /folder1/folder2/my404.html
user5891645

ErrorDocument이미 PHP 코드를 입력 한 후에는 아무런 효과가 없습니다. 이 답변 최고의 내가 직면하고있는 혼란에 대해 설명 9 년 ago
에릭

이제 문제가 해결되기를 바랍니다. 주제를 벗어난 경우? name = word_here로 리디렉션하지 않는 것이 낫다고 생각합니다. 대신 $reqpath = strtok("/".trim(substr($_SERVER["REQUEST_URI"], strlen(APP_ROOT)), "/"), "?");page.php 파일에서 사용 하십시오. 이러한 페이지 중 하나가 사용자로부터 쿼리 "이름"을 예상하는 시나리오가 있습니다.
user5891645

-2

한 번 시도해보세요.

$wp_query->set_404();
status_header(404);
get_template_part('404'); 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.