본문 바로가기
개발노트

[ubuntu] Apache Rewrite 설정하기

by SoonNote 2024. 5. 24.
반응형

모바일로 접근할때 모바일도메인으로 리다이렉트 하는방법

 

1. JAVA 코드를 이용하는 방법

 

String userAgent = request.getHeader("user-agent");
boolean mobile1 = userAgent.matches(".*(iPhone|iPod|Android|Windows CE|BlackBerry|Symbian|Windows Phone|webOS|Opera Mini|Opera Mobi|POLARIS|IEMobile|lgtelecom|nokia|SonyEricsson).*");
boolean mobile2 = userAgent.matches(".*(LG|SAMSUNG|Samsung).*");
if(mobile1 || mobile2) {
    return new ModelAndView("redirect:" + SysPropertiesUtils.getMobileUrl());
}

위 코드를 통해 사용자가 모바일로 접근하면 모바일 전용 으로 리다이렉트하는 방식으로 진행

 

 

2. Apache Rewrite 모듈 사용

2-1. mod_rewrite 활성화 확인

아파치가 설치되어있다고 가정

sudo apache2ctl -M | grep rewrite

활성회되어 있다면 rewrite_module이 출력된다.

만약 활성화되어 있지 않다면 다음 명령어로 활성화 할 수 있다.

sudo a2enmod rewrite

활성화명령어를 실행했다면 Apache 재시작을 해준다.

sudo systemctl restart apache2

 

 

 

2-2. 000-default.conf 설정

아파치가 설치되어있다고 가정하고

sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} Android|iPhone [NC]
    RewriteRule ^/about/patent$ https://mobile.test.com/about/patent [R=301,L,QSD]
</VirtualHost>

 

RewriteEngine On      #사용 설정을하고
RewriteCond %{HTTP_USER_AGENT} Android|iPhone [NC]       # 모바일체크
RewriteRule ^/about/patent$ https://mobile.test.com/about/patent [R=301,L,QSD]      # test.com/about/patent로 들어오면 mobile.test.com/about/patent로 리다이렉트 시킨다.

 

 

2-3. .htaccess 파일 추가

.htaccess 파일을 사용하여 동일한 설정을 추가할 수도 있다.(선택적)

sudo nano /var/www/html/.htaccess
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Android|iPhone [NC]
RewriteRule ^/about/patent$ https://mobile.test.com/about/patent [R=301,L,QSD]

 

 

 

3. JAVA코드방식과 Rewrite 방식이 장단점

 

- Apache 'mod_rewrite' 방식

장점

1. 성능 : Apache 레벨에서 리다이렉트를 처리하면 서버 애플리케이션 레벨까지 요청이 도달하지 않아 성능면에서 좋다

2. 단순함 : 설정 파일에 간단한 설정으로 리다이렉트를 구성할 수 있어, 코드 변경 없이도 설정이 가능하다

3. 유지보수 : 리다이렉트 규칙을 중앙집중식으로 관리할 수 있다.

 

단점

1. 복잡성 : 복잡한 리다이렉트 로직이나 조건이 필요한 경우 설정 파일에서 이를 처리하기 어렵다

2. 디버깅 : 설정 파일에서 발생하는 문제를 디버깅하기가 어려울 수 있다

 

- JAVA 코드에서 처리

장점

1. 유연성 : 복잡한 리다이렉트 로직을 쉽게 구현할 수 있다. 조건부 로직이나 사용자 맞춤형 리다이렉트가 필요한경우 좋다

2. 디버깅 : 코드 내에서 처리하기 때문에 디버깅이 용이하다.

3. 응답 조작 : 리다이렉트 외에도, 조건에 따라 다른 처리를 쉽게 추가할 수 있다.

 

단점

1. 성능 : 요청이 애플리케이션 레벨까지 도달해야 하므로, Apache에서 직접 처리하는 것 보다 성능이 저하된다

2. 복잡성 증가 : 리다이렉트 로직이 비즈니스 로직과 섞일 수 있어 코드의 복잡성이 증가한다

3. 일관성 유지 어려움 : 여러 애플리케이션에서 공통 리다이렉트 규칙을 관리하기 어렵다. 모든애플리케이션에 동일한 코드를 삽입해야 한다.

 

 

결론

성능과 단순성이 중요한경우 Apache 'mod_rewrite'를 사용하는 것이 좋아보인다.

유연성과 디버깅 용이성이 중요한 경우 Java 코드에서 사용자 에이전트를 기반으로 리다이렉트를 처리하는것이 더 좋아보인다.

 

 

반응형