Tomcat URL Rewrite 설정 가이드

Tomcat에서 www 붙이기/지우기, HTTP에서 HTTPS 리다이렉트, 301/302 응답 설정 방법입니다. UrlRewriteFilter를 사용합니다.

1. 의존성 추가

<!-- pom.xml -->
<dependency>
    <groupId>org.tuckey</groupId>
    <artifactId>urlrewritefilter</artifactId>
    <version>4.0.4</version>
</dependency>

2. 필터 등록 (web.xml)

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3. urlrewrite.xml 설정

<?xml version="1.0" encoding="UTF-8"?>
<urlrewrite>
    
    <!-- www 붙이기 (301 영구 리다이렉트) -->
    <rule>
        <name>Add www</name>
        <condition name="host" operator="notequal">^www.</condition>
        <condition name="host">(.+)</condition>
        <from>^(.*)$</from>
        <to type="permanent-redirect">https://www.%1$1</to>
    </rule>
    
    <!-- www 지우기 (301 영구 리다이렉트) -->
    <rule>
        <name>Remove www</name>
        <condition name="host">^www.(.+)</condition>
        <from>^(.*)$</from>
        <to type="permanent-redirect">https://%1$1</to>
    </rule>
    
</urlrewrite>

4. HTTP → HTTPS 리다이렉트

<rule>
    <name>Force HTTPS</name>
    <condition name="scheme" operator="notequal">https</condition>
    <from>^(.*)$</from>
    <to type="permanent-redirect">https://%{server-name}$1</to>
</rule>

5. 301 vs 302 리다이렉트

구분301302
의미영구 이동임시 이동
SEO권장 (링크 점수 전달)비권장
캐싱브라우저가 캐시매번 요청
설정type="permanent-redirect"type="temporary-redirect"

6. 경로 변경 규칙

<!-- 이전 URL을 새 URL로 -->
<rule>
    <from>^/old-page$</from>
    <to type="permanent-redirect">/new-page</to>
</rule>

<!-- 동적 경로 매핑 -->
<rule>
    <from>^/blog/([0-9]+)$</from>
    <to>/post.jsp?id=$1</to>
</rule>

<!-- 확장자 제거 -->
<rule>
    <from>^/page/(.+)$</from>
    <to>/$1.jsp</to>
</rule>

7. 조건 활용

<!-- 특정 IP만 접근 허용 -->
<rule>
    <condition name="remote-addr" operator="notequal">192.168.1..+</condition>
    <from>^/admin/.*$</from>
    <to type="temporary-redirect">/403.html</to>
</rule>

<!-- 모바일 리다이렉트 -->
<rule>
    <condition name="user-agent">.*(iPhone|Android).*</condition>
    <from>^(.*)$</from>
    <to type="temporary-redirect">https://m.example.com$1</to>
</rule>

주의사항

  • 규칙 순서 중요 - 위에서 아래로 매칭
  • 무한 루프 주의 - 조건 정확히 설정
  • 프록시 환경에서는 X-Forwarded-Proto 헤더 확인