목차
1. URL 포워딩 방법에 대해서
2. [방법1] 특정 문서의 메타태그를 이용한 방법
3. [방법2] 자바스크립트를 이용한 방법
4. [방법3] PHP3에서 사용한 방법
5. [방법4] 아파치 지시자 중 Redirect를 이용한 방법
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/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 활용(완전 매핑)
<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>에도 "/"을 넣지 않도록 한다.
[팁 끝]