0

일부 웹 페이지는 실제로 내 데이터베이스에 포함되어 있습니다. 나는 파일 이름이 MySQL의 DB에 표시되어 있는지 확인 require("checkdb.php"); 를 수행404를 찾을 수없는 htaccess에서 header() 사용

ErrorDocument 404 /error404.php 

내 error404으로 htaccess로 있습니다. 그렇다면 200 OK를 반환하고 내용을 뱉어 내고 싶습니다. 그렇지 않은 경우 그 침을 뱉어 내고 싶습니다. 404

제 404 번 문제가 있습니다. 내 페이지가 제대로 표시되는 동안 검색 엔진에 의해 선택되지 않으며 google +가 작동하지 않습니다. 이 페이지에 대한 검사를 수행 그리고 내가 (어떤 HTML 코드가 아직 표시되지 않은) 바로 데이터베이스에 확인 후

header('HTTP/1.1 200 OK'); 

을 추가 한 404

를 얻을 수 있지만, 나는

를 얻을 수

경고. 헤더 정보를 수정할 수 없습니다 - 이미가 ....

전송 헤더를 내가 header() 바로 /error404.php의 시작 부분에 내가 여전히 오류가 있음을 이동할 경우에도 마찬가지입니다. 아파치가 먼저 404를 반환 한 다음 전화를 걸면 알 수 있습니다. /error404.php

제대로 해결하려면 어떻게해야합니까? 대단히 감사드립니다.

+0

이 질문의 첫 번째 대답은 귀하의 http://stackoverflow.com/questions/5190206/apache-htaccess-how-do-i-redirect-for-files-that-arent-found-without에 대한 답변입니다. -sending-a – Oylex

답변

1

Apache가 ErrorDocument으로 지정된 문서를 보내면 일반 페이지로 제공하지 않고 이미 404 헤더를 보냈습니다. Apache에서 ErrorDocument 지시문을 사용하는 대신 PHP 스크립트를 사용하여 먼저 문서가 존재하는지 확인한 후 문서가 있는지 확인해야합니다. 존재하지 않으면 PHP는 404 오류 헤더 자체를 보냅니다.

error404.php에서 발생하지 않는 다음, 오히려 index.php를 같은 일반 스크립트 :

// Do whatever you're doing to check 
require("checkdb.php"); 

// If the check fails, PHP sends the 404: 
header("HTTP/1.0 404 Not Found"); 
// Then display your custom error document with PHP 
// You can display the other contents of error404.php 
echo "Oops, page wasn't found!"; 
exit(); 

을 그리고 아파치 설정에서 ErrorDocument 지시어를 제거합니다.

+0

문제는 "페이지"가 ​​ [링크] (http://listorm.com/M22mun6xJ) 과 같으며 이것이 설명되어있는 것입니다. 동적으로 생성 된 위조 된 페이지가 많이있을 것입니다. 포럼에서 많은 웹 사이트 디자이너가 404 오류 메시지 대신 404 오류 메시지와 함께 200 OK를 얻는 것에 대해 불만을 봤습니다. 나는 404 대신 200 OK를 원한다. – Samuel

0

헤더 행은 출력 이전이어야합니다. 일부 코드가 없으면 출력이 어디에서오고 있는지 지적 할 수있는 방법이 없습니다.

+0

위에서도 언급했듯이 /error404.php의 첫 번째 줄에 header()를 설정하여 테스트를 시도했습니다. 우리가 무엇인가를하기 전에 아파치가 404를 보내는 것처럼 들린다. – Samuel

+0

또한 헤더가 설정되기 전에 DB가 필요한지 확인했습니다. 그것은 쉽게 거기에있을 수 있습니다. 그것은 또한 어느 쪽의 파일 (또는 require'd 파일의 맨 아래)의 맨 위에있는 공간만큼 작은 것일 수도 있습니다. 체크 아웃 할 코드가 없어도 확실하게 알 수 없습니다. –

관련 문제