Server & OS

URL 포워딩 방법

페이지 정보

본문

PHP School에서 가져왔습니다.
=====================================================

작성자 : [닉:산이]
대상자 : 리눅스 초보자용
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 --------------------------------------------------
<html>
<head>
<meta http-equiv="Refresh" content="0; URL=http://kernel.linux.ac.kr">
<title>You will be moved to my new homepage automatically...
</title>
</head>
<body bgcolor=white>

You will be moved to my new homepage automatically...
If not, you can move manually clicking
<a href="http://kernel.linux.ac.kr\">here</a>.

</body>
</html>
-----------------------------------------------------------------------

앞의 내용은 예제를 보이기 위해서 본문(body)의 내용을 넣어주었다.
중요한 내용은

<meta http-equiv="Refresh" content="0; URL=http://kernel.linux.ac.kr">

이다.
content="5; URL=http://kernel.linux.ac.kr"
와 같이 설정하면 5초 후 http://kernel.linux.ac.kr URL로 이동한다.


3. [방법2] 자바스크립트를 이용한 방법

방법2와 동일한 방법이다.

----------index.html --------------------------------------------------
<script LANGUAGE="JavaScript">
document.location="http://kernel.linux.ac.kr\";
</script>
-----------------------------------------------------------------------


4. [방법3] PHP3에서 사용한 방법

역시 방법 2, 3과 동일한 방법이다.

----------index.php3 --------------------------------------------------
<?
header("Location:http://kernel.linux.ac.kr");
?>
-----------------------------------------------------------------------

주의해야할 점은
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/kernelhttp://kernel.linux.ac.kr
결과 2 : http://www.linux.ac.kr/linux/kernel.htmlhttp://kernel.linux.ac.kr
결과 3 : http://www.linux.ac.kr/~studyhttp://www.linux.ac.kr/study.html

[질문]
특정 사용자 홈 페이지를 다른 URL로 매핑하고 싶습니다. HTML을 사용하지 않고 아파치
설정으로 가능합니까?
[답변]
네 가능합니다. Redirect 지시자를 활용하십시오.
예를 들어 사용자("aaa") 홈 디렉토리 전체를
http://www.boo.com/~aaa로 매핑하고 싶다면
아파치 설정에서 다음의 내용을 추가합니다.
Redirect /~aaa http://www.boo.com/~aaa
또한 가상 호스트까지 영향이 가므로 주의하기 바랍니다.
[답변 끝]

[팁] 가상 호스트일 경우의 Redirect 활용(완전 매핑)
<VirtualHost ...>
...
Redirect /index.html http://www.someothers.com/
..
</VirtualHost>
이와 같이 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.linux.channel.net/

--------end--------------------------------------------------------------------


http://www.linuxchannel.net/docs/url_forwarding.txt

관련자료

등록된 댓글이 없습니다.
Today's proverb
"미안해" 라고 말할 때에는 상대방의 눈을 바라보면서 하라. (네팔 탄트라토템)