주제: 이사해오고 나서 예전 낱장주소 유지하기
안녕하세요.
오늘 새벽 4시경에 Wordpress 2.x 를 Textcube 1.5로 옮기는 확장기능을 만들었습니다.
여러모로 부실하지만 이사하는 데 필요한 것들은 거의 만족하네요. ^^;
다만, 제가 부딪힌 부분이 예전 블로그 낱장 주소입니다.
예전 블로그 주소가 http://www.hannal.net/blog 일 때, 이 주소 구조를 계속 유지한 채
텍스트큐브를 깔려고 하니 영 난감하네요. 간편하게 /blog 를 /blog2 식으로 바꾸면
되겠지만, 그건 저 자신도 그렇고 주소 체계를 쉽게 바꾸지 않는 분들도 그다지
좋아하시진 않을 듯 합니다.
그래서 제가 처음 생각한 방식은
1. 예전 Wordpress 의 낱장주소를 모두 별도 DB테이블에 담는다. ( 예전주소 -> 그 주소를 가진 텍스트큐브 속 post id)
2. 어떤 페이지가 열릴 때 그 주소를 분석해서(plugin으로 만들며 binding/listener 로 처리) 예전 Wordpress 주소라고 판명되면, 1번 과정에서 만든 테이블을 참조하여 그 글로 보내준다.
였습니다. 그런데 텍스트큐브 .htaccess 를 보니 2번은 안되겠더군요. 문제가 되는 부분은
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule !^(blog|cache)/ - [L]
RewriteRule ^(thumbnail)/([0-9]+/.+) cache/$1/$2 [E=SURI:1,L]
RewriteRule ^(entry|attachment|category|keylog|tag|search|plugin)/? blog/$1/index.php [E=SURI:1,L]
RewriteRule ^(.+)/[0-9]+$ blog/$1/item.php [E=SURI:1,L]
RewriteRule ^(.+)$ blog/$1/index.php [E=SURI:1,L]
입니다. 맨 마지막 줄. 파일과 디렉토리가 있을 때 뜨는 요청인데 위 조건들을 만족하지 않으면 blog/$1/index.php 로 넘기는 부분이죠.
모든 요청(?)을 index.php 로 넘긴 뒤 index.php 가 이후 과정을 판단하는 방식이 아니고 .htaccess 에서 1차로 갈라주다보니
위 .htaccess 조건에 없는 주소 요청은 file not found 가 뜹니다. (저 맨 마지막 줄에서 걸려서)
Wordpress 2는 .htaccess 가
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /think/index.php [L]
이게 다입니다. 모든 요청 주소를 index.php 로 넘긴 뒤 이 index.php가(정확히는 index.php가 require 하는 어떤 파일이 ^^; ) 접근할 수 있는 주소인지 아닌지를 구분합니다. 확장기능(plugin)에서는 텍스트큐브의 lisnter 에 해당하는(fireEvent) add_action 을 통해 화면이 열리기 전에 어떤 행위를 지정할 수 있습니다. 그래서 워드프레스에선 제가 처음에 생각했다는 방식이 가능합니다.
예를 들어 저는 wordpress 낱장 주소 구조를
/%post_name%
이라고 합니다. 텍스트큐브로 치면 slogan 을 블로그 바로 뒤에다 붙이는 셈이지요.
/blog/hello_hannal
이렇게. 그런데 텍스트큐브는
/blog/entry/hello_hannal
이런 정책을 따릅니다. 꼭 저처럼 하지 않더라도
/blog/archive/3415
/blog/2007/10/23/3415
이런 식으로 하는 경우도 모두 위 문제에 걸립니다.
즉, .htaccess 내용 중 맨 마지막에 있는 blog/$1/index.php 에서 $1 을 만족시켜주지 못하므로 현재 텍스트큐브 구조로는 예전 블로그 낱장 주소를 유지하는 것이 어렵다는 결론이 납니다.
.htaccess 를 고치도록 하면 되겠지만, 이걸 이용자에게 스스로 고치라고 하는 건 많이 찝찝해서 되도록 피하려니 답이 안나오네요. (실은 저 혼자라도 .htaccess 를 고쳐서 해보려고 했는데 잘 안되더라고요. ^^; 머리가 나쁜 지 rewriterule 문서를 보고 했는데도 안되네요. 쩝)
뭐, 얼마나 많은 사람들이 이사를 하고 낱장 주소 유지하려고 바득 바득 기를 쓰겠냐만은, 기왕이면 텍스트큐브에 관심을 갖고 있는데 다른 블로그 도구를 쓰는 여러 사람들이 부담없이 갈아탈 수 있게 하고 싶습니다. 제 이사 확장기능 소스가 개판이라 그렇지 그래도 다른 블로그 도구 옮기는 기능을 덧붙이기 쉽게(??) 소스 구조를 짠 것도 그런 이유고요.
어떻게 하면 현 텍스트큐브 낱장 주소 구조와 완전히 다른 주소 구조를 가진 옛 낱장주소를 유지할 수 있을까요?
hannal (2007-08-30 11:56:54)에 의해 마지막으로 수정