[아파치] 물음 줄글(query string)을 다루는 고쳐쓰기(rewrite) 규칙

http://www.example-site.com/bbs/index.php?id=123#section_1

  웹 주소에는 물음표(?) 뒤에 붙은 'id=123' 같은 물음 줄글(query string, 쿼리 스트링)이 붙곤 한다. 물음 줄글은 주소로 변수와 값을 건낼 때에 쓰인다. 더 많은 변수와 값을 건낼 때는 'id=123&num=45&p=1'처럼 & 기호로 덧붙일 수 있다.

  블로그나 게시판을 만드는 웹 풀그림들이 실제로 쓰이는 주소에는 물음 줄글이 자주 붙지만, 많은 웹 풀그림들은 고쳐쓰기(rewrite) 규칙을 써서 겉으로는 'http://www.example-address.com/bbs/123'처럼 더 간단한 꼴로 나타내곤 한다.


  아파치(apache) 서버에서 'http://www.example-site.com/archive?num=105'을 'http://www.example-address.com/105/index.php' 꼴로 바꾸려면 다음 고쳐쓰기 규칙을 쓸 수 있다.

RewriteEngine On

RewriteCond %{QUERY_STRING} num=([0-9]*)
RewriteRule ^archive /%1/index.php? [L,R]

  여기에서 L은 뒤에 나오는 규칙을 적용하지 않고 바로 그 주소로 이동함을 뜻하고, R은 주소를 다시 가리켜 정했음을 뜻한다. 뒤에서 주소를 더 고쳐 쓸 때는 [L,R]을 붙이지 않는다. 'RewriteEngine On'은 고쳐쓰기 규칙의 첫머리에 한 번만 넣으면 된다. 이 내용을 .htaccess 파일에 넣거나 아파치 서버 설정 파일의 가상호스트(Viraulhost) 설정에 넣으면 고쳐쓰기 규칙을 적용할 수 있다.


  만약 'http://www.example-site.com/archive?id=88&num=105&q=abc'를 num 변수에 앞뒤 붙은 변수들을 그대로 붙여서 'http://www.example-site.com/105/index.php?id=88&q=abc'로 바꾸고 싶다면 아래처럼 쓸 수 있다.

RewriteCond %{QUERY_STRING} ^(.*)num=([0-9]*)[&]*(.*)$
RewriteRule ^archive$ /%2/index.php?%1%3 [L,R]

  텍스트큐브에서는 글 분류(카테고리)별로 보는 글 목록에 'http://example-blog.net/105?category=5'처럼 category 변수가 붙은 글 주소가 나온다. 글의 분류를 바뀌면 category 값이 바뀌어 글이 나오지 않을 수 있으므로, 검색기에 이런 글 주소가 올라가면 나중에 버리는 주소가 될 수 있다. (관련 글 : [텍스트큐브] 분류된 글 주소를 기본 꼴로 나타내기)

  아래는 category 변수가 붙은 주소를 어느 때나 변수가 붙지 않은 주소로 보내는 고쳐쓰기 규칙이다

RewriteCond %{QUERY_STRING} ^(.*)category=[0-9]*[&]*(.*)$
RewriteRule ^(.*)$ $1?%1%2 [L,R=301]

  R=301는 검색기에 주소를 아주 옮겼음을 알릴 때에 쓴다.


  아래와 같은 꼴의 주소는 웹 탐색기에 따라 주소 전달이 잘 되지 않을 수 있다.

http://www.example-address.com/archive?id=88#section_1

  인터넷 탐색기(Internet Explorer, IE) 9과 사파리(Safari) 5은 위와 같은 고쳐쓰기 규칙들을 쓸 때에 # 뒤에 붙은 자리 가리키개(fragment identifier)를 건네지 못하고 있다.

글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요