나는 URL을 숫자가 아닌 문자로 사용하고 있다. 문자로 표시하는 것이 주소를 보다 더 명확하게 표시할 수 있고 검색엔진에서도 더 잘 검색되기 때문이다. 한때는 제목을 그대로 사용했지만 한글을 주소로 사용하면 다음과 같은 문제점이 발생한다.

  1. UTF 지원 여부에 따라 두개의 주소 체계가 사용됨
  2. 브라우저에 따라 접속하지 못하는 현상이 발생

따라서 얼마 전부터는 URL을 영어로 만들어서 사용하고 있다. 그런데 예전에 글을 올리면서 URL을 Fucking-XXX로 쓴적이 있는데 태터툴즈에 접근하지 못하는 이상한 현상이 발생했다. 제목을 바꾸면 정상 동작하는 것을 보고 태터툴즈의 필터링 기능일 것으로 생각하고 말았다. 그런데 이런 현상이 며칠 전 포르노에 대한 추억이라는 글을 올리면서 또 발생했다. URL을 보면 알겠지만 원래의 URL은 /entry/Memories-of-Porno였지만 이 현상 때문에 /entry/Memories-of-Hustler로 바꾼 것이다.

루트 폴더 접근 불가

그림에서 알 수 있지만 https://offree.net/은 접근할 수 없다는 오류 메시지가 뜬다.

깨진 로그인 창

로그인 창이 뜨기는 하지만 그림처럼 CSS와 그림을 불러오지 못한다. 아울러 로그인을 시도하면 또 403 Forbidden 메시지가 뜬다.

깨진 관리화면

이전에 로그인한 세션을 이용해서 로그인을 하면 그림처럼 CSS와 이미지를 불러오지 못한다.

결국 MyAdmin을 이용해서 MySQL에 접속, URL을 직접 바꿈으로서 일단 이 문제를 해결했다. 그러나 이런 현상이 계속 발생하기 때문에 그 원인을 찾아봤다. 그런데 의외로 원인은 태터툴즈가 아니었다. 나타나는 증상이 조금 이상해서 얼핏 이해가 되지 않았지만 이 문제는 내가 참조 URL 스팸을 막기위해 .htaccess를 설정했기 때문에 발생한 일이었다.

지긋 지긋한 참조 URL 스팸이라는 글에서 알 수 있듯이 예전에 참조 URL 스팸이 많아서 이런 스팸을 막기위해 .htaccess에 다음과 같은 설정을 추가한 적이 있다.

SetEnvIfNoCase Referer "sex|porno|adult|mature|xxx|fuck|lesbian|
    nude|xrate|rape|fetish|sesso|erotic" hacker
Deny from env=hacker

이 설정을 보면 알 수 있지만 참조 URL에 'porno'나 'fuck'가 포함되면 요청 자체를 거절하는 설정이다. 참조 URL에 porno나 fuck가 포함되면 거절하기위해서 한 설정이었다. 따라서 /entry/Memories-of-Porno라는 주소는 당연히 불러올 수 있다. 그러나 /entry/Memories-of-Porno 페이지에서 불러오는 파일(CSS, JS, 이미지등)의 참조 URL은 /entry/Memories-of-Porno가 되며 참조 URL 중 'Porno'라는 말이 포함되어 있기 때문에 모조리 거절된 것이었다.

설정 변경 뒤

설정을 바꾸자 그림처럼 Porno라는 URL 역시 정상으로 표시된다.

따라서 .htaccess의 설정을 바꾸자 이 문제는 바로 수정되었다. 혹시라도 나와 비슷한 현상이 발생하는 사람은 .htaccess의 설정을 다음처럼 바꾸기 바란다.

SetEnvIfNoCase Referer "sex|porno|adult|mature|xxx|fuck|lesbian| 
    nude|xrate|rape|fetish|sesso|erotic" [AND]
SetEnvIfNoCase Referer !"offree.net" hacker
Deny from env=hacker

관련 글타래