[텍스트큐브] 글 주소를 옮기는 아파치/엔진엑스 고쳐쓰기 규칙 (Apache/Nginx Rewrite Rule)

  텍스트큐브(textcube)에서는 글 주소로 다음 두 가지 꼴이 쓰인다.

숫자 주소 → http://www.tc-blog.net/123
문자 주소 http://www.tc-blog.net/entry/글-제목

  또 휴대 기기용 화면을 보여 주는 주소 꼴도 있다.

http://www.tc-blog.net/m/123
http://www.tc-blog.net/i/entry/123

  블로그 주소를 바꾸었거나 이미 올렸던 글 대신에 새로 올린 글을 보여 주고 싶을 때가 있을 수 있다. 웹 서버 엔진의 설정 파일에 고쳐쓰기 규칙(rewrite rule)을 끼워 넣는다면, 텍스트큐브의 본래 글 주소를 고스란히 다른 주소로 보낼 수 있다.

  www.old-blog.com에 있던 블로그 글을 www.tc-blog.net으로 옮기고 싶다고 해 보자.  여기에서는 두 블로그가 웹 경로(도메인 주소)의 뿌리(루트)에 설치되어 있다고 가정한다. 그리고 글 하나의 주소를 다음처럼 고친다고 하자.

http://www.old-blog.com/123  →  http://www.tc-blog.net/456
http://www.old-blog.com/entry/글-제목  →  http://www.tc-blog.net/entry/새-제목

  먼저 웹 서버 엔진으로 아파치(Apache)를 쓸 때를 살펴 보자.  아파치는 서버 엔진의 설정 파일인 httpd.conf 파일 안의 가상호스트(VirtualHost) 설정에 고쳐쓰기 규칙을 끼워넣거나 각 경로의 .htaccess 파일을 만들어 고쳐쓰기 규칙을 넣을 수 있다.

  글 하나의 주소를 바꾸려면 텍스트큐브가 설치된 경로에 있는 .htaccess 파일에 아래처럼 고쳐쓰기 규칙을 끼워넣어 준다.주1

RewriteEngine On
RewriteBase /

RewriteRule ^(m/|i/entry/)?123$ http://www.tc-blog.net/$1456 [L,R=301]
RewriteRule ^entry/글-제목$ http://www.tc-blog.net/entry/새-제목 [L,R=301]

  [L,R=301]에서 R=301은 그 주소를 아주 옮겼음을 검색기에 알리기 위한 것이고, L은 그 아랫줄에 있는 고쳐쓰기 규칙을 적용하지 않고 바로 주소를 옮기라는 뜻이다.

  만약 도메인 주소만 바꾸어 모든 글 주소를 옮기고 싶다면 다음처럼 고쳐쓰기 규칙을 넣어 준다.

RewriteRule ^(m/|i/entry/)?([0-9]+)$ http://www.tc-blog.net/$1$2 [L,R=301]
RewriteRule ^entry/(.*)$ http://www.tc-blog.net/entry/$1 [L,R=301]

  엔진엑스(Nginx)에서는 아파치의 .htaccess를 쓰는 것처럼 각 자료방(디렉토리)마다 고쳐쓰기 규칙을 담은 파일을 따로 만들어 쓸 수 없고, 전체 설정 파일인 nginx.conf 파일에 고쳐쓰기 규칙을 넣거나 연결해야 한다.

[nginx.conf]
...
server_name  www.old-blog.com;
...

server {

  location / {
    rewrite ^/(m/|i/entry/)?123$ http://www.tc-blog.net/$1456 permanent;
    rewrite ^/entry/글-제목$ http://www.tc-blog.net/entry/새-제목 permanent;
   }
}

  여기에서 permanent는 아파치의 [L,R=301]과 같은 뜻으로 쓰였다. 엔진엑스에서 도메인 주소만 바꾸어 모든 글을 그대로 옮기려면 아래처럼 고쳐쓰기 규칙을 넣어 준다.

    rewrite ^/(m/|i/entry/)?([0-9]+)$ http://www.tc-blog.net/$1$2 permanent;
    rewrite ^/(entry/.*)$ http://www.tc-blog.net/$1 permanent;
〈주석〉
  1. 고쳐쓰기 규칙에 한글이 들어간다면 .htaccess 파일의 부호 체계를 텍스트큐브가 쓰는 UTF-8으로 저장하여야 한다. back
글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요

  1. 홀맨 2013/11/29 19:44 고유주소 고치기 답하기

    항상 좋은 정보와 도움에 감사 드립니다.

    저는 도메인 주소 루트에 텍큐가 깔려 있는것이 아니여서 도메인 루트로 접속하는 것을 텍큐로 이동시키기 위해 검색을 통해 도메인 루트의 .htaccess 파일을 다음과 같이 수정하였습니다.

    RewriteEngine On
    RewriteBase /
    RewriteRule ^(.*)$ http://도메인 주소/tc/$1 [L,QSA]

    이러한 수정으로 도메인 루트로의 접속을 텍큐로 유도하였으나, 도메인 서브 디렉토리에는 텍큐 이외에도 다른 웹보드 어플리케이션이 있어, 이쪽으로의 접속은 예외 처리하고 싶습니다.

    *질문*
    예를들어 텍큐 이외에도 test 라는 서브디렉토리가 있을시, 도메인주소로 접속시 기본으로 텍큐로 넘어가되, test 로의 접속만 그대로 test 로 전달하는 방법을 여쭙고자 합니다.

    관련 지식이 전무하니 매번 부끄러운 수준의 질문만 드리게 되는 듯 싶습니다. 즐거운 주말 보내십시요.

    • 팥알 2013/11/29 20:39 고유주소 고치기 답하기

      RewriteEngine On
      RewriteBase /
      RewriteRule ^(test)($|/.*) - [L]

      이렇게 해 두면 test 경로는 도메인 주소 뿌리에 있는 .htaccess의 고쳐쓰기 규칙이 적용되지 않습니다.

      RewriteRule ^(test1|test2|test3)($|/.*) - [L]

      예외로 할 경로명이 많다면 이렇게 여러 개 적어 줄 수도 있겠습니다.

      저도 배우고 따라 하면서 블로그를 꾸리는 처지이고, 원리는 알더라도 기억은 잘 못합니다. 낮은 수준의 질문이 결코 아니라고 생각합니다. 이런 기회에 잊어 버린 것 복습도 할 수 있어서 좋습니다.^^

  2. 홀맨 2013/12/01 13:07 고유주소 고치기 답하기

    가르침에 감사 드립니다. 덕분에 잘 처리할 수 있었습니다. ^^
    더군다나 응용 방법도 알려주셔서 앞으로 더많은 경우에도 대응할 수 있을듯 합니다.

  3. 홍길동 2014/04/09 16:45 고유주소 고치기 답하기

    혹시 redirect 할때 변수 한글로도 가능한가요?
    theLinky.com/donggun 으로 연락주세요

    • 팥알 2014/04/09 17:35 고유주소 고치기 답하기

      고쳐쓰기 규칙이 들어간 파일을 저장할 때 유니코드(UTF-8)로 저장하면 한글이 들어간 주소도 됩니다.

  4. 헬프미ㅠㅠ 2015/09/18 11:11 고유주소 고치기 답하기

    안녕하세요 도움을 요청하고자 글 남겨 봅니다.

    RewriteCond %{HTTP_HOST} ^test.com$ [NC]
    RewriteRule ^/(.*) http://www.test.com/$1 [L,R]
    와 같이 www.가 없는 url로 입력이 되면 www를 붙여주는 설정이 되어 있는 상태에서

    한파일만 예외를 주는 방법이 있나요?
    예를 들어 http://test.com/test.html 이라고 url을 입력하면
    www가 없이 http://test.com/test.html 그대로 나오게 끔 말입니다.

    방법을 찾다 찾다 이렇게 글 남겨 봅니다 .ㅠㅠ

    • 팥알 2015/09/18 13:26 고유주소 고치기 답하기

      www를 붙여 주는 식 앞쪽에

      RewriteCond %{HTTP_HOST} ^test.com$ [NC]
      RewriteRule ^/test.html - [L]

      처럼 더 적어 주면 되지 않을까 싶습니다.

      한 가지 표현 방법만 있는 것은 당연히 아니고, 여러 가지 방법이 있을 겁니다. 도메인 주소을 얼마나 많이 쓰는지와 www를 붙이지 않는 예외를 얼마나 많이 두는지에 따라 가장 쓰기 편하고 간결한 표현식이 달라질 수 있습니다.