Apache rewrite module 설정관리 정리

URL rewrite module 이란?

URL Rewrite 모듈은 웹 서버에서 URL 재작성 및 리디렉션을 수행하는 기능을 제공하는 모듈입니다. 이 모듈은 클라이언트가 요청한 URL을 웹 서버에서 처리하기 전에 변경하거나 리디렉션하는 작업을 수행합니다. 주로 Apache 웹 서버의 mod_rewrite와 비슷한 역할을 하는 모듈로, URL의 구조를 수정하거나 사용자 친화적인 형태로 변경할 수 있습니다.

URL Rewrite 모듈은 다양한 종류가 있습니다. 일반적으로 사용되는 몇 가지 URL Rewrite 모듈의 종류는 다음과 같습니다:

  1. Apache mod_rewrite: Apache 웹 서버의 URL 재작성 및 리디렉션을 담당하는 모듈입니다. .htaccess 파일을 사용하여 규칙을 작성하고, 정규 표현식을 활용하여 URL을 재작성할 수 있습니다.
  2. IIS URL Rewrite: Microsoft IIS (Internet Information Services) 웹 서버의 URL 재작성 모듈입니다. XML 기반의 웹.config 파일을 사용하여 규칙을 설정하고, 정규 표현식 또는 사용자 정의 규칙을 활용하여 URL을 재작성할 수 있습니다.
  3. Nginx ngx_http_rewrite_module: Nginx 웹 서버의 URL 재작성 모듈입니다. Nginx의 설정 파일에서 rewrite 지시자를 사용하여 URL 재작성 규칙을 작성하고, 정규 표현식을 활용하여 URL을 재작성할 수 있습니다.
  4. Lighttpd mod_rewrite: Lighttpd 웹 서버의 URL 재작성 모듈입니다. Lighttpd의 설정 파일에서 rewrite 지시자를 사용하여 URL 재작성 규칙을 작성하고, 정규 표현식을 활용하여 URL을 재작성할 수 있습니다.

이러한 URL Rewrite 모듈은 각각의 웹 서버에서 사용되며, 해당 서버의 설정 파일 또는 모듈 설정을 통해 사용자가 필요에 맞게 URL을 재작성하거나 리디렉션할 수 있습니다.

Apache 웹 서버의 mod_rewrite 설정방법

  1. mod_rewrite 모듈 활성화:
    • Apache 웹 서버에 mod_rewrite 모듈이 설치되어 있어야 합니다. 대부분의 경우 기본적으로 설치되어 있으며, 필요한 경우 모듈을 활성화해야 할 수도 있습니다. 아파치 모듈을 활성화하려면 a2enmod 명령을 사용할 수 있습니다.
    • Ubuntu에서는 sudo a2enmod rewrite 명령을 실행하여 mod_rewrite 모듈을 활성화합니다.
    • CentOS나 Fedora에서는 sudo vi /etc/httpd/conf/httpd.conf와 같은 방법으로 설정 파일을 열고, LoadModule rewrite_module modules/mod_rewrite.so 라인이 주석 처리되어 있지 않은지 확인합니다. 주석 처리되어 있다면 주석을 제거하고 파일을 저장합니다.
  2. AllowOverride 옵션 확인:
    • mod_rewrite를 사용하기 위해 AllowOverride 옵션을 활성화해야 합니다. AllowOverride는 .htaccess 파일에서 설정을 허용하는지 여부를 결정합니다.
    • Apache 웹 서버의 설정 파일에서 AllowOverride 옵션을 확인하고, 해당 디렉토리 또는 가상 호스팅에 대해 AllowOverride All로 설정되어 있는지 확인합니다.
    • 설정 파일에서 <Directory> 또는 <DirectoryMatch> 섹션 내에서 AllowOverride 옵션을 찾아 설정합니다.
  3. .htaccess 파일 작성:
    • mod_rewrite를 사용하기 위해 .htaccess 파일에 URL 재작성 규칙을 작성해야 합니다.
    • 웹 서버의 DocumentRoot 디렉토리에 .htaccess 파일을 생성하고, 필요한 URL 재작성 규칙을 작성합니다.
    • 예를 들어, .htaccess 파일에 다음과 같이 작성할 수 있습니다:apacheCopy codeRewriteEngine On RewriteRule ^old-page$ new-page [L]
  4. 웹 서버 재시작:
    • 설정 변경을 적용하기 위해 웹 서버를 재시작해야 합니다.
    • Ubuntu에서는 sudo service apache2 restart 명령을 사용하여 Apache 서버를 재시작합니다.
    • CentOS나 Fedora에서는 sudo service httpd restart 명령을 사용합니다.

위 단계를 따라 Apache 웹 서버에서 mod_rewrite를 설정하고, .htaccess 파일에 URL 재작성 규칙을 작성하여 원하는 동작을 구현할 수 있습니다. .htaccess 파일의 변경 사항은 즉시 적용되며, 웹 서버 재시작 없이 사용자 친화적인 URL 구조를 설정할 수 있습니다.

아파치 mod_rewrite 자주 사용하는 설정예시

이러한 URL 재작성 기능을 사용하면 사용자에게 보다 쉬운 도메인을 제공해 줄수 있는데요.
상황별 예시를 정리해 보겠습니다.

  1. 확장자 제거 :
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^(.*)$ $1.html [L]
  2. 확장자 추가 :
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ $1.html [L]
  3. 디렉토리 인덱스 변경 :
    DirectoryIndex index.html
  4. URL 리디렉션 :
    RewriteEngine On
    RewriteRule ^old-page$ new-page [L,R=301]
  5. 도메인 리디렉션 :
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC]
    RewriteRule ^(.*)$ http://new-domain.com/$1 [L,R=301]
  6. HTTPS 강제 리디렉션 :
    RewriteEngine On RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  7. 대소문자 통일 :
    RewriteEngine On
    RewriteMap tolower int:tolower
    RewriteRule ^(.*)$ ${tolower:$1} [R=301,L]
  8. 매개변수 추가 :
    RewriteEngine On
    RewriteRule ^page$ page.php?type=1 [L]
  9. 매개변수 제거 :
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^(.*)&?type=1&?(.*)$ [NC]
    RewriteRule ^page$ /page?%1%2 [L,R=301]
  10. 디렉토리 구조 변경 :
    RewriteEngine On
    RewriteRule ^category1/(.*)$ /category2/$1 [L]

위의 설정 값은 .htaccess 파일이나 아파치 설정화일에 작성하며, .htaccess 파일이 웹 서버의 DocumentRoot 디렉토리에 위치해야 합니다. 각 설정 예시는 원하는 동작에 맞게 수정하고 .htaccess 파일에 적용하여 사용하시면 됩니다.

URL 재작성 기능을 설정하는 다른 방법

Apache 웹 서버에서 URL 재작성과 관련된 기능을 설정하는 방법은 여러 가지가 있습니다. 아래에는 Apache 웹 서버에서 mod_rewrite와 유사한 기능을 설정하는 일반적인 방법의 종류를 나열하였습니다.

  1. .htaccess 파일: .htaccess 파일은 디렉토리 단위에서 설정을 적용하는 데 사용되는 파일입니다. 웹 서버의 AllowOverride 옵션이 허용된 경우, 해당 디렉토리에 .htaccess 파일을 작성하고 내용에 URL 재작성 규칙을 포함시킬 수 있습니다.
  2. 웹 서버 설정 파일 (예: httpd.conf 또는 apache2.conf): Apache 웹 서버의 메인 설정 파일에 직접 URL 재작성 규칙을 작성할 수 있습니다. 이를 위해서는 <Directory> 또는 <VirtualHost> 섹션 내에 <IfModule mod_rewrite.c> 블록을 추가하고 규칙을 작성해야 합니다.
  3. <Location> 블록: 특정 URL 경로에 대해 URL 재작성 규칙을 설정하려는 경우, <Location> 블록을 사용하여 해당 URL 경로에 대한 규칙을 작성할 수 있습니다.
  4. <VirtualHost> 섹션: 가상 호스팅을 사용하는 경우, <VirtualHost> 섹션 내에서 URL 재작성 규칙을 작성할 수 있습니다. 이를 통해 특정 가상 호스트에 대한 URL 재작성 규칙을 설정할 수 있습니다.
  5. RewriteMap 지시문: RewriteMap 지시문을 사용하여 매핑 테이블을 생성하고, URL 재작성 규칙에 동적인 데이터를 적용할 수 있습니다. 매핑 테이블은 정적 파일 또는 외부 프로그램을 통해 작성될 수 있습니다.

이러한 방법들은 Apache 웹 서버의 다양한 설정 영역에서 URL 재작성과 관련된 기능을 구현하는 데 사용됩니다. 선택한 방법은 개발자의 환경과 요구에 따라 다를 수 있으며, 서버 설정 파일의 구성과 환경에 따라 다르게 적용될 수 있습니다.

작동이 안될 때 조치사항

아파치에서 URL 재작성이 제대로 작동하지 않는 것은 대부분 위에서 언급한 설정부분이 잘못되어 있는 경우가 클것 같습니다. 다음의 조치사항을 다시한번 확인해 보는게 좋을것 같네요.

  1. AllowOverride 확인:
    • .htaccess 파일에 작성된 URL 재작성 규칙이 제대로 작동하려면, 해당 디렉토리 또는 가상 호스팅에 대해 AllowOverride All 또는 AllowOverride FileInfo 설정이 필요합니다. 설정 파일에서 해당 디렉토리 또는 가상 호스팅의 <Directory> 또는 <DirectoryMatch> 섹션에서 AllowOverride 옵션을 확인하고 설정해야 합니다.
  2. 모듈 활성화 확인:
    • mod_rewrite 모듈이 활성화되어 있는지 확인해야 합니다. 웹 서버의 모듈 목록에서 mod_rewrite 모듈이 나열되어 있는지 확인하고, 필요한 경우 모듈을 활성화해야 합니다. Ubuntu에서는 sudo a2enmod rewrite 명령을 실행하여 mod_rewrite 모듈을 활성화할 수 있습니다.
  3. 파일 및 디렉토리 경로 확인:
    • .htaccess 파일의 위치와 파일 이름을 확인해야 합니다. 웹 서버의 DocumentRoot 디렉토리에 .htaccess 파일이 있는지 확인하고, 파일 이름이 .htaccess로 정확히 작성되어 있는지 확인합니다. 또한, 파일과 디렉토리의 권한도 확인하여 적절한 접근 권한이 부여되었는지 확인해야 합니다.
  4. RewriteBase 설정:
    • .htaccess 파일 내에서 RewriteBase 지시문을 사용하여 기본 경로를 설정할 수 있습니다. RewriteBase를 사용하여 서버의 기본 경로를 설정하고, 재작성 규칙에 적절한 상대 경로를 사용하도록 합니다.
  5. 로그 확인:
    • 아파치 웹 서버의 에러 로그를 확인하여 재작성과 관련된 오류 메시지나 경고를 찾습니다. 에러 로그를 통해 어떤 문제가 발생하고 있는지 파악할 수 있습니다.
  6. 웹 서버 재시작:
    • 설정 변경을 적용하기 위해 웹 서버를 재시작해야 할 수 있습니다. Ubuntu에서는 sudo service apache2 restart 명령을 사용하여 Apache 서버를 재시작하고, CentOS나 Fedora에서는 sudo service httpd restart 명령을 사용합니다.

위의 조치사항을 따라가며 설정을 확인하고 수정하면, URL 재작성을 제대로 작동시킬 수 있습니다. 문제가 지속되면 에러 로그와 함께 추가적인 디버깅을 수행하여 문제를 해결할 수도 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다