웹 서버를 운영하면서 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 로 연결
'Server > Web' 카테고리의 다른 글
Web - Apache를 이용한 로드 밸런서 설정 가이드 (0) | 2024.05.28 |
---|---|
Web - Apache mod_rewrite 사용 변수 모음집 (0) | 2024.05.18 |
Web - Apache SSL 인증서 비밀번호 자동입력 / 비밀번호 삭제 (2) | 2023.10.27 |
Windows - Apache Web Server 설치 (4) | 2023.04.18 |
Linux - Apache Web Server 설치 (컴파일 / yum) (0) | 2023.02.21 |