주제: Robots.txt 플러그인을 만들다가 경험한 이야기
안녕하세요. 포럼에는 처음으로 글을 쓰게 되네요
잘 부탁드립니다.
다름아니라 주말에 플러그인을 좀 보다가 신기한 걸 발견해서 같은 고생하시는 분 있을까봐 적어봅니다.
예전에 제가 쓰는 다중블로그에 robots.txt를 달고 싶어서 고민을 하다가 선택적으로 달 수 있도록 플러그인을 만들었습니다.
내용은 대강..
<?
function RobotsTXT($target,$mother) {
header('Content-Type: text/plain; charset=UTF-8');
print("User-agent: *\r\n");
print("Disallow: /\r\n");
}
?>요렇게 무척 간단합니다 ^^; 이벤트는 블로그주소/plugin/XXX 와 같은 형태로 나오는 이벤트를 사용하고 있구요.
다만 요놈의 문제는 현재 태터 구조상 plugin이 http://블로그주소/robots.txt 주소를 받을 수 없기 때문에,
.htaccess의 RedirectRule을 고쳐야한다는 점이지요. 그래서 공개하기 민망하기도 하지만 여튼 조용히 저희만 쓰고 있습니다.
그런데 이게 잘 되는 줄만 알았는데, 어느날 IE로 저 페이지를 접근해보니 404 에러가 나는 것이었습니다 ![]()
알고보니 항상 404 에러가 나고 있었는데, FF는 404에러가 남에도 불구하고 robots.txt에 해당하는 내용을 보여줘서 제가 몰랐던 것이더군요.
한참을 고민한 끝에 찾아낸 이유는 바로 HTTP 헤더가 제대로 설정되지 않아서였습니다 ![]()
현재 태터에서는 위와같이 /plugin/XXX 주소를 쓰는 플러그인의 경우 제대로 페이지를 처리했는지를 header_sent() 함수로 체크하더군요.
보통의 경우는 위와같이 내용을 찍어도 별 문제가 없는데, 위 경우는 내용이 너무 짧아서인지 플러그인의 처리가 다 끝나서도 헤더가 안보내진 것이었습니다.
그래서 태터에서는 플러그인이 실패한 줄 알고 404에러... ![]()
결국에는 header() 뒤에 flush() 넣어서 해결했습니다 --a
혹시 저같이 삽질하시는 분 있을까봐 몇 자 적어봤습니다. header()는 헤더를 클라이언트에 완전히 보내는 함수가 아니라는데 주의합시다~~ ![]()
ways (2006-12-18 14:41:27)에 의해 마지막으로 수정