답변:
코드가 기술적으로 정확합니다. 빈 페이지의 헤더를 보면 404 헤더가 표시되며 다른 컴퓨터 / 프로그램은 응답을 파일을 찾을 수 없음으로 올바르게 식별 할 수 있습니다.
물론 사용자는 여전히 SOL입니다. 일반적으로 404는 웹 서버에서 처리합니다.
문제는 일단 웹 서버가 PHP 페이지 처리를 시작하면 404를 처리 할 지점을 이미 통과 한 것입니다.
PHP는 404 헤더를 제공 할뿐만 아니라 실제 404 페이지를 출력합니다.
이것이 올바른 행동 입니다. 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 -->
die()
필요?
기본 서버 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와 존재하지 않는 페이지를 구별 할 수 없습니다.
조금 더 짧은 버전. 홀수 에코를 억제합니다.
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 문을 단순화하지 말고 위와 같이 세미콜론을 잊지 마십시오. 또한 페이지에서 substr을 실행하는 이유는 php_self를 쉽게 실행할 수 있습니다.
정제를 사용할 수는 있지만 올바르게하고 있습니다. 이 문제가 해결 된 것처럼 보이므로 실용적인 응용 프로그램 이점에 대해 이야기 해 보겠습니다.
다국어 기술 문서 모음이 많은 오래된 웹 사이트에서 if 조건부에서이를 실행했습니다.
if (<no file found>){
die("NO FILE HERE");
}
우리는 일반적으로 링크 크롤러 (우리의 경우 무결성)를 사용하여 잘못된 링크와 누락 된 문서를 체크 아웃한다는 문제 (유용하지 않은 메시지와 나쁜 사용자 경험 제외)입니다. 이것은 우리에게 파일이 있다는 것을 알려주는 200 개의 오류없는 응답이 완벽하게 있다는 것을 의미합니다. 무결성은 우리가 PDF를 기대한다는 것을 알지 못했기 때문에 PHP로 404 헤더를 수동으로 추가해야했습니다. 다이 위에 코드를 추가하면 (나중에 아무것도 실행되지 않고 헤더가 항상 렌더링 된 HTML 앞에 있어야하기 때문에) 무결성 (브라우저와 거의 비슷하게 동작 함)은 404를 반환하며 누락 위치를 정확히 알 수 있습니다 파일. 사용자에게 오류가 있음을 알리는 더 우아한 방법이 있습니다.
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: "".$_SERVER['REQUEST_URI']."", 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>");
}
도움이 되길 바랍니다.