질문/조언질답게시판
Extra Form

안녕하세요. 404때문에 질문하려합니다.

XE는 한글로 쳤을 때와 영어로 쳤을 때 404가 서로 다르더군요.

즉, http://도메인/asdf 하고 http://도메인/ㅁㄴㅇㄹ 이렇게 쳤을 때 404 페이지가 다르게 나온다는 겁니다. xe town에서도 테스트해봤는데 여기도 404가 한글일 때와 영어일때가 다르더군요.

본론으로 들어가서, 제가 404 페이지를 직접 만들어서 .httaccess 맨 밑에 ErrorDocument 404 /(404 index파일이 담긴 디렉토리)/ 이렇게 해줬는데 한글로 쳤을 때는 정상적으로 만들어진 디렉토리에 있는 index.html이 띄워지는데 영어로 치면 기존 xe 레이아웃 내부에서 설정된 404페이지가 나오네요. 영어로 쳤을 때도 한글처럼 해당 디렉토리에 있는 index가 띄워지게 설정하는 법 있을까요?

 

추가) 실례지만, 프레임 사용은 사양하겠습니다. php include 또한 이미 xe - modules - message - skins - 사용중인 스킨 - http_status_code.html에서 수정해본 결과 내용이 짤려서 출력됩니다.

  • profile

    도메인/asdf 이렇게 영어로 입력하면 mod_rewrite가 모듈명(mid)으로 인식하고 XE에게 넘겨주기 때문에 XE에서 에러페이지를 출력하고요, 한글은 모듈명(mid)이 될 수 없기 때문에 XE에게 넘겨주지 않고 웹서버(아파치/nginx) 자체에서 에러페이지를 출력합니다. 디자인이 달라지는 게 당연하지요.

     

    이미 시도해 보신 것처럼, 웹서버에서 출력하는 404 에러 페이지를 커스터마이징하기는 쉽습니다. XE의 에러 페이지를 커스터마이징하기는 좀더 어렵죠. 따라서 먼저 XE의 에러 페이지를 원하는 대로 커스터마이징하신 후, 그렇게 출력되는 HTML 소스를 복사해서 별도의 파일에 저장하여 웹서버에서 ErrorDocument로 사용하는 것이 좋습니다.

     

    ErrorDocument 404 /index.php?mid=blablabla 이렇게 존재하지 않는 mid를 넣어서 XE에게 넘겨주면 웹서버의 404 에러페이지도 모두 XE가 처리하도록 만들 수 있지만, 404 에러가 발생할 때마다 XE를 실행하게 되므로 서버 부하는 다소 높아집니다.

  • profile ?

    제목 없음.png

    그렇군요. 한가지 더 질문있습니다. xe에서 404처리해줄때 title 태그가 위에 사진처럼 메뉴명이 출력안되고 하이바 뒤에 사이트 이름형식으로 출력되는데 좀 보기 않좋은데 저 부분을 수정해줄 방법이 있을까요?

  • ? profile
    템플릿 파일이나 그 밖의 적당한 곳에서 Context::setBrowserTitle() 또는 Context::addBrowserTitle() 함수를 호출해 주세요.
  • profile ?
    잘 이해가 안갑니다.
    현재 제 타이틀 태그에
    <title>{Context::getBrowserTitle()} | 사이트 이름</title> 이렇게 함수가 적혀있는데, 저는 404가 뜰 때
    404 NOT FOUND | 사이트 이름 이런식으로 출력시키려고하는데, 여기서 무언가 손을 봐야하는 것이 맞는지요?
  • ? profile
    getBrowserTitle은 다른 곳에서 정해준 제목을 불러오는 거예요. 예를 들어 게시판 모듈에는 글 제목을 넣어주는 기능이 있습니다.

    아무 제목도 정해져 있지 않아서 제목이 이상하게 나온다면 getBrowserTitle을 하기 전에 setBrowserTitle로 제목을 강제 지정해 주면 됩니다. 아니면 타이틀 태그 자체를 수정해서 getBrowserTitle이 없는 경우 다른 내용을 출력하도록 하면 되고요.
  • profile ?
    그 말씀은 title태그에 자바스크립트 같은걸로 조건문 같은거 만들어서 넣으라고 하시는 걸 같은데 검색을 좀 해봐야되겠네요. 답변 감사합니다.
  • ? profile
    자바스크립트는 필요하지 않습니다. 언급하신 <title> 소스 자체에서 조건문을 사용하면 됩니다.
  • profile ?
    초보라서 어렵네요
    <title>
    if(Context::getBrowserTitle() = null)
    {Context::setBrowserTitle() = "404 NOT FOUND";}
    </title>
    이런식으로 해주면 되는건가요?
  • ? profile
    <title>{Context::getBrowserTitle() ?: '404 Not Found'} | 사이트 이름</title>

    이렇게 해보세요. ?:는 "앞의 것이 있으면 앞의 것을 출력하고, 없으면 뒤의 것을 출력하라"는 뜻입니다.
  • profile ?
    감사합니다. 해보고 답 드릴게요
  • profile ?
    음... 안돼네요...
  • ? profile
    위의 이미지처럼 하이픈과 사이트 이름이 출력되는 이유는 SEO 모듈이 작동하기 때문입니다.
    SEO 모듈을 사용하지 않는다면 404페이지의 타이틀은 도메인주소가 출력될것입니다.
    이미 헤더에서 타이틀이 설정되었기 때문에 메세지 스킨페이지, 404페이지
    즉 바디에서 타이틀이 설정되는것와 같기때문에 타이틀을 설정하여도 적용되지 않습니다.

    제 생각에는 404페이지를 나타내는 이미 설정되는 페이지이므로 안에 내용도 404라고 나오듯시
    때에 따라서는 사용자에 따라 다르게 표현할 수 도 있겠지만..
    타이틀이 보기싫다고 하셨기에 간단하게 페이지 하단에 스크립터로 처리하시는것도 나쁘지 않을것 같네요.

    간단하게 아래와 같이 시스템 메세지 또는 원하시는 문구를 넣는방법도 있습니다.
    <s/cript type="text/javascript"> document.title = '{$system_message}';</s/cript>
  • profile ?
    이따가 집에가서 시도해보겠습니다.
  • ?
    오 잘됩니다. 뒤에 system_message 부분을 404 NOT FOUND라 바꿔줬더니 의도했던대로 됐네요. 감사합니다.