제목 : [팁] URL 포워딩 방법 작성자 : 김칠봉[닉:산이] san2(at)linuxchannel.net 대상자 : 리눅스 초보자용 2000.04.09 : 최초 작성 2000.06.10 : 부분 수정 *주) 이 내용은 아직 출간되지 않은 원고의 일부분을 약간 더 추가해서 올린 내용입니다. 원고의 내용상 "존칭어" 생략하겠습니다. ---------------------------------------------------------------------- *주) 배경 - 이 문서를 쓰게된 동기 필자 역시 예전에 그러했듯이 많은 초보자의 공통된 관심사 중 하나이다. 어느 리눅스 게시판을 보더라도 질문과 답변란에 이 내용은 단골 손님처럼 등장하곤 한다. 자주 질문되는 공통된 내용이다 보니 모두 다 함께 볼 수 있는 내용으로, 그리고 조금 더 자세한 설명을 추가하여 초보자가 이해하기 쉽도록 편집해 보았습니다. ----------------------------------------------------------------------- 목차 1. URL 포워딩 방법에 대해서 2. [방법1] 특정 문서의 메타태그를 이용한 방법 3. [방법2] 자바스크립트를 이용한 방법 4. [방법3] PHP3에서 사용한 방법 5. [방법4] 아파치 지시자 중 Redirect를 이용한 방법 6. 마치며 1. URL 포워딩 방법에 대해서 이 문서에서의 URL 포워딩이라 함은 웹 싸이트에서 특정 문서를 다른 URL로 이동함을 의미한다. 예를 들어, http://www.linux.ac.kr/~kernel을 입력했을 경우, 자동으로 http://kernel.linux.ac.kr 싸이트로 이동하게 하는 방법이다. 특히 초보자가 많이 질문하는 "도메인 포워딩"하고는 본질적으로 다르지만, 하나의 특정 도메인에서 다른 도메인으로 이동한다는(포워딩) 점에서 비슷한 기능을 가지고 있다. *주)----------------------------------------------------------------- 필자가 생각하는 "도메인 포워딩"은 그 특정 도메인을 관리하는 네임서버 주소를 다른 주소로 이동(?)함을 의미한다고 생각한다. BIND8의 부트 파일(named.conf)에서 다음과 같은 경우. options { ... forward only ; forwarders {192.168.12.8 ; 192.168.12.9;}; .. }; 또는 zone "linux.ac.kr" { type forward; forward only ; forwarders {192.168.12.8 ; 192.168.12.9;}; .. }; 도메인 포워딩에 관한 정확한 정의와 지식이 있는 분은 상위의 필자 메일로 답변해 주시면 고맙겠습니다. --------------------------------------------------------------------- URL을 포워딩하는 방법은 크게 4가지 정도의 방법이 있다. 방법1) HTML 문서 헤더의 메타태그를 이용한 방법 방법2) 자바스크립트를 이용한 방법 방법3) PHP에서 Header() 함수를 이용한 방법 방법4) 아파치 지사자 중 Redirect를 이용한 방법 등이다. 이 중에서 방법1, 2, 3은 웹 디렉토리 내에 이미 존재하는 문서에서 설정해야한다. 즉, 시스템 관리자가 아닌 계정 사용자 원하는 문서에서 사용하기 편한 방법이다. 단점은 웹브라우저의 [Back] 버튼을 눌렸을 경우, 바로 이전 URL로 이동하기 힘들다는 점이다.(0초로 설정했을 경우) 즉 이동을 설정했던 싸이트로 들어가면 바로 다른 싸이트로 이동하게 끔 설정해 놓았기 때문이다. 사용자 입장에서는 조금 불편한 점은 없지않아 있다. 이런 방법을 역이용해서 다른 싸이트로 이동하지 못하게(?)하는 싸이트가 꽤 있다.. 한 두번 쯤 경험해 봤을 것으로 믿는다. 반면, 방법4는 아파치 서버 관리자 입장에서 설정해야하며 기존의 문서가 존재했으나(또는 존재하지 않았어도 무방하다.) 지금은 웹 디렉토리에 내에 존재하지 않은 경우에 유용한 방법이다. 주로 특정 호스트 전체를 통체로 이동하고자 할 경우에 유용한 방법이다. 2. [방법1] 특정 문서의 메타태그를 이용한 방법 만약, 웹 주소가 http://www.linux.ac.kr/~kernel 이고, 이 주소를 http://kernel.linux.ac.kr으로 이동하게 하려면 http://www.linux.ac.kr/~kernel/index.html 파일에 다음과 같이 헤더에 매타태그를 추가한다. ----------index.html -------------------------------------------------- You will be moved to my new homepage automatically... You will be moved to my new homepage automatically... If not, you can move manually clicking here. ----------------------------------------------------------------------- 앞의 내용은 예제를 보이기 위해서 본문(body)의 내용을 넣어주었다. 중요한 내용은 이다. content="5; URL=http://kernel.linux.ac.kr" 와 같이 설정하면 5초 후 http://kernel.linux.ac.kr URL로 이동한다. 3. [방법2] 자바스크립트를 이용한 방법 방법2와 동일한 방법이다. ----------index.html -------------------------------------------------- ----------------------------------------------------------------------- 4. [방법3] PHP3에서 사용한 방법 역시 방법 2, 3과 동일한 방법이다. ----------index.php3 -------------------------------------------------- ----------------------------------------------------------------------- 주의해야할 점은 header() 함수를 사용하기전에 바로 앞 줄에 echo()함수나 printf()문이 없어야 한다. 만약 header() 함수 이전에 echo() 함수가 있다면 에러를 발생할 것이다. 이는 SetCookie() 함수를 사용하는 방법과 똑같이 다루어져야 한다. 5. [방법4] 아파치 지시자 중 Redirect를 이용한 방법 이 방법은 아파치 서버 관리자 입장에서 설정하는 방법으로 기존에 소개했던 3가지 방법과는 다르게 기존에 존재했던 문서이든지 존재하지 않았던 문서이든지에 상관없이 특정 문서나 디렉토리를 다른 URL로 이동하는 방법이다. Redirect <이전 URL> <새로운 URL> Redirect 지시자는, 지금은 서버에 존재하지 않은 문서(URL)에 대해서 다른 URL로 포워딩 한다. 이 지시자는 클라이언트 입장에서 매우 유용하다. 예전에 자신의 홈페이지가 현재의 서버에 존재했지만 지금은 다른 곳으로 옮겨졌다면 클라 이언트에게 알려줄 필요가 있다. 물론 URL 포워딩은 사용자 입장에서 HTML 메타 태그로 가능하지만 서버입장에서 Redirect 지시자를 이용하여 쉽게 포워딩이 가능하다. 여러 개의 Redirect 지시자 사용이 가능하다. 다음의 예제를 보자. 예제 1 : Redirect /kernel http://kernel.linux.ac.kr 예제 2 : Redirect /linux/kernel.html http://kernel.linux.ac.kr 예제 3 : Redirect /~study http://www.linux.ac.kr/study.html <이전 URL>에 해당하는 부분은 "http://"로 시작하는 URL이 아니고 DocumentRoot나 호 스트 네임 다음에 들어갈 URL 부분을 말한다. <새로운 URL>은 실제로 존재하는 URL을 의미하며 자기 자신의 서버일지라로 완전한 이름의 URL로 입력한다. "ServerName www.linux.ac.kr"이라면 각각의 예제는 다음과 같이 포워딩한다. 결과 1 : http://www.linux.ac.kr/kernel → http://kernel.linux.ac.kr 결과 2 : http://www.linux.ac.kr/linux/kernel.html → http://kernel.linux.ac.kr 결과 3 : http://www.linux.ac.kr/~study → http://www.linux.ac.kr/study.html [질문] 특정 사용자 홈 페이지를 다른 URL로 매핑하고 싶습니다. HTML을 사용하지 않고 아파치 설정으로 가능합니까? [답변] 네 가능합니다. Redirect 지시자를 활용하십시오. 예를 들어 사용자("aaa") 홈 디렉토리 전체를 http://www.boo.com/~aaa로 매핑하고 싶다면 아파치 설정에서 다음의 내용을 추가합니다. Redirect /~aaa http://www.boo.com/~aaa 또한 가상 호스트까지 영향이 가므로 주의하기 바랍니다. [답변 끝] [팁] 가상 호스트일 경우의 Redirect 활용(완전 매핑) ... Redirect /index.html http://www.someothers.com/ .. 이와 같이 DocumentRoot의 index.html 파일에 대해서 직접적으로 다른 웹 주소로 매핑한 다. 그러나 다음과 같은 경우에는 조심하도록 한다. Redirect / http://www.someothers.com/ 즉 전체를 매핑하는 경우이므로 다른 가상 호스트까지 영향을 준다는 점이다. 위의 방법은 틀린 방법은 아니지만 원하지않은 URL이동이 있을 수 있으므로 대도록이면 제일 마지막 섹션에 넣어주는것이 좋다. 특히 다음과 같이 하나의 섹션안에서 적용할 경우에는 더욱 조심해야한다. 틀린 경우(X) : Redirect / http://www.someothers.com/ Redirect /~san2 http://san2.someothers.com/ 맞는 경우(O) : Redirect /~san2 http://san2.someothers.com/ Redirect / http://www.someothers.com/ 즉 좁은 부분(/~san2)을 먼저 설정하고 나머지 부분(/)을 뒤쪽에 기입해야한다. 또한 다음의 경우도 사소한 것이지만 주의하도록 한다. 애매한 경우 : Redirect /~san2 http://www.someothers.com/ 맞는 설정 Redirect /~san2 http://www.someothers.com 또는 Redirect /~san2/ http://www.someothers.com/ 즉, <이전 URL> 마지막의 "/" 문제이다. 앞의 애매한 경우를 예를 들어보자. 사용자가 다음과 같은 <이전 URL>을 요청했다고 하면, http://www.linux.ac.kr/~san2/linux/ 결과는 http://www.someothers.com//linux/ 이와 같다. "//" 부분이 왜 두개가 들어가는지 지레짐작할 수 있을 것이다. 필자의 경우, 이와 같이 잘못된 URL 설정으로 아파치 프로세스가 최대치에 도달했던 경험이 있었다.......(웁.......끔찍...150개...T.T) 결론적으로 <이전 URL> 마지막 설정에 "/"이 들어간다면 <새로운 URL>의 마지막에도 "/"를 꼭 넣어두라고 권하고 싶다. 그 반대로 "/"이 들어가지 않으면 <새로운 URL>에도 "/"을 넣지 않도록 한다. [팁 끝] 6. 마치며 공통된 질문에 대해서 짧게나마 기존에 존재했던 문서나 지식을 바탕으로 제 나름대로 문서화해 보았습니다. 이 문서는 어느 누구도 전체 또는 부분을 복제 및 수정해서 재배포할 수 있으며 자신의 홈페이지에 링크 또는 자신의 홈페이지에 올려놓아도 상관없습니다. 또한 상업적으로 이용할 계획이라도 본 필자에게 문의 메일없이 사용할 수 있습니다 즉, 이 문서에 대해서는 사용상 어떠한 제한이 없음을 알려드립니다. 원작성자를 표기하지 않아도 상관없으며, 필요하다고 생각되면 원작성자를 표기해도 상관없습니다. 단, 사용상의 문제점등으로 피해를 있었을 경우, 본인에게 어떠한 법률적인 책임이 없음을 미리 공지하는 바 입니다. 감사합니다. 본 문서의 보완이나 잘못된 점이 있으면 아래의 본인의 홈페이지 질문과 답변란 게시판을 이용해 주셨으면 고맙겠습니다. http://www.linuxchannel.net/ --------end--------------------------------------------------------------------