본문 바로가기

Server/Web

Web - Apache 웹 서버에서 Redirect / Rewrite 방법

728x90

웹 서버를 운영하면서 URL을 재작성하거나 리다이렉트 하는 기능(Redirect Rewrite 등)이 자주 사용됩니다.

두 방법 다 httpd.conf 파일에 값을 설정해서 사용 가능합니다.

 

리다이렉트 (Redirect)란?

리다이렉트는 클라이언트에게 요청한 URL이 다른 URL로 이동했음을 알려주는 방식입니다. 서버는 클라이언트에게 새 URL을 제공하고 클라이언트는 그 새 URL로 다시 요청을 보냅니다. 주로 HTTP 상태 코드 301(영구) 또는 302(임시)와 함께 사용됩니다.

 

Redirect의 장점

  • 클라이언트가 새 URL을 알게 되므로 검색 엔진 최적화(SEO)에 유리합니다.
  • URL이 변경된 경우 사용자에게 명확하게 알려줍니다.

Redirect의 단점

  • 클라이언트가 서버에 두 번 요청을 보내므로 성능에 약간의 영향이 있을 수 있습니다.

사용법

1. 영구 리다이렉트(301)

<VirtualHost *:80>
    ServerName samso.tistory.com
    Redirect 301 / https://samso.new-tistory.com/
</VirtualHost>

보통 a로 들어온 URL을 b로 이동시키는 경우 (http -> https 리다이렉팅시 사용)

 

2. 임시 리다이렉트(302)

<VirtualHost *:80>
    ServerName samso.tistory.com
    Redirect 302 / http://samso.temp-tistory.com/
</VirtualHost>

임시로 URL을 변경해야 할 경우 (사이트 점검 중 페이지 / 특정 이벤트 페이지로 이동)

 

3. 특정 경로만 리다이렉트

<VirtualHost *:80>
    ServerName samso.tistory.com
    <Location /old-page.html>
        Redirect 301 /old-page.html http://samso.tistory.com/new-page.html
    </Location>
</VirtualHost>

http://samso.tistory.com/old-page.html 으로 들어오면 http://samso.tisotry.com/net-page.html 으로 리다이렉팅

 

 

반응형

 

 

리라이트 (Rewrite)란?

리라이트는 클라이언트가 요청한 URL을 내부적으로 다른 URL로 변경하여 서버에서 처리합니다. 클라이언트는 이 변경을 알 수 없으며 브라우저의 URL도 변화가 없습니다. mod_rewrite 모듈을 사용하여 설정합니다.

 

Rewrite의 장점

  • 클라이언트에게 투명하게 작동하여 사용자 경험이 매끄러워집니다.
  • 내부 URL 구조를 감출 수 있어 보안에 유리합니다.

Rewrite의 단점

  • 검색 엔진이 새로운 URL 구조를 알지 못하므로 SEO에 영향을 미칠 수 있습니다.
  • 복잡한 규칙 설정 시 실수가 발생할 수 있습니다.

사용법

## httpd.conf 에 아래 모듈이 활성화 되어 있어야 함
LoadModule rewrite_module modules/mod_rewrite.so

 

1. 기본 리라이트

<VirtualHost *:80>
    ServerName samso.tistory.com
    RewriteEngine On
    RewriteRule ^old-page.html$ /new-page.html [R=301,L]
</VirtualHost>

http://samso.tistory.com/old-page.html 으로 들어오면 http://samso.tisotry.com/net-page.html 으로 리라이팅

 

2. 조건부 리라이트

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/old-directory/
RewriteRule ^old-directory/(.*)$ new-directory/$1 [L]

request 받은 URL의 /old-directory로 접근 시 new-directory로 리라이팅

 

3. 다중 조건 리라이트

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/old-directory/
RewriteCond %{HTTP_HOST} ^samso.tistory.com$
RewriteRule ^old-directory/(.*)$ http://samso.new-tistory.com/new-directory/$1 [R=301,L]

http_host가 samso.tistory.com 이면 samso.new-tistory.com로 이동과 함께 old -> new-directory로 리라이팅

 

RewriteCond (Rewrite Condition)

RewriteCond란 RewriteRule 실행 전 조건이라 생각하면 편합니다.

사용법

RewriteCond '테스트문자열' '조건' ['옵션']
  • 테스트문자열 : 테스트할 문자열, 서버 변수, 환경 변수, 요청 헤더 등 사용 가능
  • 조건 : 정규 표현식 또는 특수 패턴 사용 가능
  • 옵션 : 선택적으로 사용 가능하며 조건을 수정해 사용 가능
RewriteCond %{HTTP_USER_AGENT} !Googlebot

URL에 요청하는 사용자 에이전트가 Googlebot 이 아닌 경우만 만족

RewriteCond 옵션

  • [NC] : No Case로 대소문자를 구분하지 않도록 설정합니다.
  • [OR] : 여러 조건을 논리적 OR로 연결합니다.
RewriteCond %{HTTP_HOST} ^test\.com$ [NC]

NC 조건을 사용하여 "test.com", "TesT.COm", "TEST.COM"을 동일하게 처리

RewriteCond %{REQUEST_URI} ^/page1\.html$ [OR]
RewriteCond %{REQUEST_URI} ^/page2\.html$

OR 조건을 사용하여 page1.html 또는 page2.html 가 매칭 되면 RewriteRule 실행

 

RewriteRule (Rewrite Rule)

RewriteCond 조건이 만족되면 RewriteRule이 실행되어 요청된 URL을 변환합니다.

사용법

RewriteRule '패턴' '대체문자열' ['옵션']
  • 패턴 : 요청된 URL과 매칭할 정규 표현식 패턴
  • 대체문자열 : 패턴이 매칭될 때 대체할 문자열 또는 경로
  • 옵션 : 선택적으로 사용 가능하며 조건을 수정해 사용 가능
RewriteRule ^old-page\.html$ new-page.html [L,R=301]

old-page.html로 요청이 들어오면 new-page.html로 영구 리다이렉트(301) 하도록 설정

 

RewriteRule 옵션

  • [L] : Last로 현재 규칙이 마지막이라는 의미로 더 이상의 규칙을 처리하지 않습니다.
  • [R] : Redirect로 리다이렉트를 해주는 규칙입니다. 상태값 301 302 사용 가능
  • [NC] : No Case로 대소문자를 구분하지 않도록 설정합니다.
  • [C] : Chian으로 여러 규칙을 연결할 때 사용합니다. (순차 처리)
  • [F] : Forbidden으로 요청을 금지하고 403 상태 코드를 반환합니다.
  • [G] : 요청된 자원이 더 이상 존재하지 않을 경우 410 상태 코드를 반환합니다.
RewriteRule ^old-page\.html$ new-page.html [L]

이 규칙이 처리된 후 더 이상의 규칙을 처리하지 않게 [L] 설정

RewriteRule ^(.*)$ https://samso.tistory.com$1 [R,L]

들어오는 모든 값은 https 주소로 리다이렉팅 후 더 이상 처리 안 함

RewriteRule ^old-page\.html$ new-page.html [NC]

"old-page.html", "Old-PAgE.HTml" 모두 "new-page.html"으로 리라이트

 

 

URL 처리가 가능한 다른 방법

1. 프록시 (Proxy)

클라이언트의 요청을 다른 서버로 전달하여 응답을 받아 다시 클라이언트에게 전달하는 방식으로 Apache의 mod_proxy 모듈을 사용하여 설정합니다.

## httpd.conf 에 아래 모듈이 활성화 되어 있어야 함
LoadModule proxy_module modules/mod_proxy.so
<VirtualHost *:80>
    ServerName samso.tistory.com
    ProxyPass / http://samso.new-tistory.com/
    ProxyPassReverse / http://samso.new-tistory.com/
</VirtualHost>

Proxy 기능을 이용해 samso.tistory.com 으로 접근 시 samso.new-tistory.com 으로 URL 처리

 

2. Alias 디렉티브

Alias 디렉티브를 사용하면 URL 경로를 특정 파일 시스템 경로와 매핑할 수 있습니다.

Alias /images/ /var/www/images/
<Directory /var/www/images/>
    Require all granted
</Directory>

samso.tistory.com/images로 접근 시 웹 서버 내 /var/www/images 로 연결

 

 

 

 

728x90
반응형