Apache의 mod_rewrite 모듈을 사용하여 도메인 포워딩(리디렉션)을 설정하는 방법에 대해 상세히 설명드리겠습니다. 도메인 포워딩은 사용자가 특정 도메인으로 접근할 때 다른 도메인으로 자동으로 이동시키는 기능입니다. 예를 들어, www.old-domain.com에 접속하면 자동으로 www.new-domain.com으로 리디렉션되도록 설정할 수 있습니다.

mod_rewrite란?

mod_rewrite 는 Apache 웹 서버의 확장 모듈로, URL을 동적으로 변경할 수 있게 해줍니다. 이를 통해 복잡한 리디렉션 규칙을 정의하고 URL 구조를 개선할 수 있습니다.

아래는 mod_rewrite를 이용한 도메인 포워딩 설정 방법을 단계별로 설명한 내용입니다.

1. mod_rewrite 모듈 활성화

먼저, Apache의 mod_rewrite 모듈이 활성화되어 있는지 확인해야 합니다. 활성화되지 않은 경우 활성화하는 방법은 다음과 같습니다.

Ubuntu/Debian 계열

sudo a2enmod rewrite
sudo systemctl restart apache2

CentOS/RHEL 계열

보통 기본적으로 활성화되어 있지만, 활성화되지 않은 경우 httpd.conf 파일을 수정해야 합니다.

# httpd.conf 파일 열기
sudo vi /etc/httpd/conf/httpd.conf

# LoadModule 줄 확인 및 주석 해제
LoadModule rewrite_module modules/mod_rewrite.so

# 파일 저장 후 Apache 재시작
sudo systemctl restart httpd

2. Apache 설정 파일 수정

도메인 포워딩은 주로 Virtual Host 설정 또는 .htaccess 파일을 통해 설정할 수 있습니다. 여기서는 두 가지 방법을 모두 설명하겠습니다.

방법 1: Virtual Host 설정을 통한 도메인 포워딩

예제 시나리오

  • 기존 도메인: www.old-domain.com
  • 포워딩 대상 도메인: www.new-domain.com

설정 단계

  1. Virtual Host 설정 파일 열기

    일반적으로 설정 파일은 /etc/apache2/sites-available/ (Ubuntu/Debian) 또는 /etc/httpd/conf.d/ (CentOS/RHEL)에 위치합니다. 예를 들어, old-domain.conf 파일을 생성하거나 수정합니다.

    sudo vi /etc/apache2/sites-available/old-domain.conf
    
  2. Virtual Host 설정 추가

    <VirtualHost *:80>
        ServerName www.old-domain.com
        ServerAlias old-domain.com
    
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.com$ [NC]
        RewriteRule ^(.*)$ http://www.new-domain.com/$1 [R=301,L]
    </VirtualHost>
    

    설명:

    • RewriteEngine On: mod_rewrite 엔진을 활성화합니다.
    • RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.com$ [NC]: 요청된 호스트가 old-domain.com 또는 www.old-domain.com일 경우에만 다음 RewriteRule을 적용합니다. [NC]는 대소문자 구분 없이 매칭함을 의미합니다.
    • RewriteRule ^(.*)$ http://www.new-domain.com/$1 [R=301,L]: 모든 요청 경로를 http://www.new-domain.com/으로 리디렉션합니다. [R=301,L]은 301 영구 리디렉션을 의미하며, 마지막 규칙임을 나타냅니다.
  3. 사이트 활성화 및 Apache 재시작

    Ubuntu/Debian의 경우:

    sudo a2ensite old-domain.conf
    sudo systemctl reload apache2
    

    CentOS/RHEL의 경우 설정 파일이 conf.d에 위치하므로 별도의 활성화 명령이 필요 없으며, 바로 재시작합니다.

    sudo systemctl restart httpd
    

방법 2: .htaccess 파일을 통한 도메인 포워딩

.htaccess 파일은 디렉토리별로 Apache 설정을 덮어쓸 수 있는 파일입니다. 특정 디렉토리에 .htaccess 파일을 생성하거나 수정하여 리디렉션을 설정할 수 있습니다.

설정 단계

  1. .htaccess 파일 위치

    리디렉션을 적용할 도메인의 루트 디렉토리에 .htaccess 파일을 생성하거나 수정합니다. 예를 들어, /var/www/html/에 위치할 수 있습니다.

  2. .htaccess 파일 수정

    sudo vi /var/www/html/.htaccess
    

    파일에 다음 내용을 추가합니다.

   RewriteEngine On
   RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.com$ [NC]
   RewriteRule ^(.*)$ http://www.new-domain.com/$1 [R=301,L]

설명: 이전의 Virtual Host 설정과 동일한 의미를 가집니다.

  1. Apache 설정 파일에서 .htaccess 사용 허용

    .htaccess 파일을 사용하기 위해서는 Apache 설정 파일에서 AllowOverride 지시어가 적절히 설정되어 있어야 합니다. 예를 들어, /etc/apache2/sites-available/000-default.conf 파일을 열고 <Directory> 섹션을 수정합니다.

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

    주의: AllowOverride All은 보안상 취약점을 유발할 수 있으므로, 필요한 경우에만 사용하고 가능한 최소한의 권한을 부여하는 것이 좋습니다.

  2. Apache 재시작

    설정을 적용하기 위해 Apache를 재시작합니다.

    sudo systemctl restart apache2
    

3. 리디렉션 테스트

설정을 완료한 후, 웹 브라우저를 열고 www.old-domain.com 또는 old-domain.com으로 접속하여 www.new-domain.com으로 제대로 리디렉션되는지 확인합니다. 또한, 경로와 쿼리 스트링이 올바르게 전달되는지 테스트합니다.

예를 들어:

  • http://www.old-domain.com/abouthttp://www.new-domain.com/about
  • http://old-domain.com/contact?ref=homepagehttp://www.new-domain.com/contact?ref=homepage

4. 추가 고려사항

1. HTTPS 리디렉션

만약 새 도메인이 HTTPS를 사용하고 있다면, 리디렉션 URL을 https로 설정해야 합니다.

RewriteRule ^(.*)$ https://www.new-domain.com/$1 [R=301,L]

2. www와 non-www 리디렉션 통일

도메인 리디렉션 시 www 사용 여부를 통일하여 SEO에 유리하도록 설정할 수 있습니다. 예를 들어, 모든 요청을 www가 포함된 도메인으로 리디렉션하려면 다음과 같이 설정합니다.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.old-domain.com/$1 [R=301,L]

그 후, www.old-domain.com에서 www.new-domain.com으로 리디렉션하는 규칙을 추가합니다.

3. 301 vs 302 리디렉션

  • 301 (영구 리디렉션): 검색 엔진에 영구적인 이동을 알리며, SEO에 영향을 줍니다.
  • 302 (임시 리디렉션): 일시적인 이동을 알리며, SEO에 큰 영향을 주지 않습니다.

일반적으로 도메인 포워딩은 영구적인 이동이므로 301을 사용하는 것이 적합합니다.

4. SEO 고려사항

도메인 리디렉션 시 검색 엔진이 새로운 도메인으로 인덱싱을 잘 반영할 수 있도록 설정해야 합니다. 301 리디렉션을 사용하면 검색 엔진이 기존 도메인의 SEO 가치를 새로운 도메인으로 이전할 수 있습니다.

5. 캐시 문제

브라우저가 301 리디렉션을 캐시할 수 있으므로, 설정을 변경할 때는 브라우저 캐시를 지우거나 다른 브라우저를 사용하여 테스트하는 것이 좋습니다.

5. 예제 전체 설정

아래는 Ubuntu/Debian 계열에서 Virtual Host 설정을 통해 도메인 포워딩을 설정하는 전체 예제입니다.

1) Virtual Host 설정 파일 생성

sudo vi /etc/apache2/sites-available/old-domain.conf

2) 설정 내용 추가

<VirtualHost *:80>
    ServerName www.old-domain.com
    ServerAlias old-domain.com

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.com$ [NC]
    RewriteRule ^(.*)$ https://www.new-domain.com/$1 [R=301,L]
</VirtualHost>

3) 사이트 활성화 및 Apache 재시작

sudo a2ensite old-domain.conf
sudo systemctl reload apache2

이제 http://www.old-domain.com 또는 http://old-domain.com으로 접속하면 자동으로 https://www.new-domain.com으로 리디렉션됩니다.

결론

Apache의 mod_rewrite 모듈을 사용하여 도메인 포워딩을 설정하는 방법을 살펴보았습니다. Virtual Host 설정을 통해 보다 중앙집중적으로 관리할 수 있으며, .htaccess 파일을 사용하면 디렉토리별로 유연하게 설정할 수 있습니다. 상황에 맞게 적절한 방법을 선택하여 도메인 리디렉션을 설정하시기 바랍니다.

추가적으로, mod_rewrite 외에도 Redirect 지시어를 사용하는 방법이 있지만, mod_rewrite는 보다 유연하고 강력한 기능을 제공하므로 복잡한 리디렉션 규칙을 설정할 때 유용합니다.

도움이 되셨기를 바랍니다!

댓글남기기