URL rewrite module 이란?
URL Rewrite 모듈은 웹 서버에서 URL 재작성 및 리디렉션을 수행하는 기능을 제공하는 모듈입니다. 이 모듈은 클라이언트가 요청한 URL을 웹 서버에서 처리하기 전에 변경하거나 리디렉션하는 작업을 수행합니다. 주로 Apache 웹 서버의 mod_rewrite와 비슷한 역할을 하는 모듈로, URL의 구조를 수정하거나 사용자 친화적인 형태로 변경할 수 있습니다.
URL Rewrite 모듈은 다양한 종류가 있습니다. 일반적으로 사용되는 몇 가지 URL Rewrite 모듈의 종류는 다음과 같습니다:
- Apache mod_rewrite: Apache 웹 서버의 URL 재작성 및 리디렉션을 담당하는 모듈입니다. .htaccess 파일을 사용하여 규칙을 작성하고, 정규 표현식을 활용하여 URL을 재작성할 수 있습니다.
- IIS URL Rewrite: Microsoft IIS (Internet Information Services) 웹 서버의 URL 재작성 모듈입니다. XML 기반의 웹.config 파일을 사용하여 규칙을 설정하고, 정규 표현식 또는 사용자 정의 규칙을 활용하여 URL을 재작성할 수 있습니다.
- Nginx ngx_http_rewrite_module: Nginx 웹 서버의 URL 재작성 모듈입니다. Nginx의 설정 파일에서 rewrite 지시자를 사용하여 URL 재작성 규칙을 작성하고, 정규 표현식을 활용하여 URL을 재작성할 수 있습니다.
- Lighttpd mod_rewrite: Lighttpd 웹 서버의 URL 재작성 모듈입니다. Lighttpd의 설정 파일에서 rewrite 지시자를 사용하여 URL 재작성 규칙을 작성하고, 정규 표현식을 활용하여 URL을 재작성할 수 있습니다.
이러한 URL Rewrite 모듈은 각각의 웹 서버에서 사용되며, 해당 서버의 설정 파일 또는 모듈 설정을 통해 사용자가 필요에 맞게 URL을 재작성하거나 리디렉션할 수 있습니다.
Apache 웹 서버의 mod_rewrite 설정방법
- 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
라인이 주석 처리되어 있지 않은지 확인합니다. 주석 처리되어 있다면 주석을 제거하고 파일을 저장합니다.
- Apache 웹 서버에 mod_rewrite 모듈이 설치되어 있어야 합니다. 대부분의 경우 기본적으로 설치되어 있으며, 필요한 경우 모듈을 활성화해야 할 수도 있습니다. 아파치 모듈을 활성화하려면
- AllowOverride 옵션 확인:
- mod_rewrite를 사용하기 위해 AllowOverride 옵션을 활성화해야 합니다. AllowOverride는 .htaccess 파일에서 설정을 허용하는지 여부를 결정합니다.
- Apache 웹 서버의 설정 파일에서 AllowOverride 옵션을 확인하고, 해당 디렉토리 또는 가상 호스팅에 대해
AllowOverride All
로 설정되어 있는지 확인합니다. - 설정 파일에서
<Directory>
또는<DirectoryMatch>
섹션 내에서 AllowOverride 옵션을 찾아 설정합니다.
- .htaccess 파일 작성:
- mod_rewrite를 사용하기 위해 .htaccess 파일에 URL 재작성 규칙을 작성해야 합니다.
- 웹 서버의 DocumentRoot 디렉토리에 .htaccess 파일을 생성하고, 필요한 URL 재작성 규칙을 작성합니다.
- 예를 들어,
.htaccess
파일에 다음과 같이 작성할 수 있습니다:apacheCopy codeRewriteEngine On RewriteRule ^old-page$ new-page [L]
- 웹 서버 재시작:
- 설정 변경을 적용하기 위해 웹 서버를 재시작해야 합니다.
- Ubuntu에서는
sudo service apache2 restart
명령을 사용하여 Apache 서버를 재시작합니다. - CentOS나 Fedora에서는
sudo service httpd restart
명령을 사용합니다.
위 단계를 따라 Apache 웹 서버에서 mod_rewrite를 설정하고, .htaccess 파일에 URL 재작성 규칙을 작성하여 원하는 동작을 구현할 수 있습니다. .htaccess 파일의 변경 사항은 즉시 적용되며, 웹 서버 재시작 없이 사용자 친화적인 URL 구조를 설정할 수 있습니다.
아파치 mod_rewrite 자주 사용하는 설정예시
이러한 URL 재작성 기능을 사용하면 사용자에게 보다 쉬운 도메인을 제공해 줄수 있는데요.
상황별 예시를 정리해 보겠습니다.
- 확장자 제거 :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [L]
- 확장자 추가 :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ $1.html [L]
- 디렉토리 인덱스 변경 :
DirectoryIndex index.html
- URL 리디렉션 :
RewriteEngine On
RewriteRule ^old-page$ new-page [L,R=301]
- 도메인 리디렉션 :
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC]
RewriteRule ^(.*)$ http://new-domain.com/$1 [L,R=301]
- HTTPS 강제 리디렉션 :
RewriteEngine On RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
- 대소문자 통일 :
RewriteEngine On
RewriteMap tolower int:tolower
RewriteRule ^(.*)$ ${tolower:$1} [R=301,L]
- 매개변수 추가 :
RewriteEngine On
RewriteRule ^page$ page.php?type=1 [L]
- 매개변수 제거 :
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)&?type=1&?(.*)$ [NC]
RewriteRule ^page$ /page?%1%2 [L,R=301]
- 디렉토리 구조 변경 :
RewriteEngine On
RewriteRule ^category1/(.*)$ /category2/$1 [L]
위의 설정 값은 .htaccess 파일이나 아파치 설정화일에 작성하며, .htaccess 파일이 웹 서버의 DocumentRoot 디렉토리에 위치해야 합니다. 각 설정 예시는 원하는 동작에 맞게 수정하고 .htaccess 파일에 적용하여 사용하시면 됩니다.
URL 재작성 기능을 설정하는 다른 방법
Apache 웹 서버에서 URL 재작성과 관련된 기능을 설정하는 방법은 여러 가지가 있습니다. 아래에는 Apache 웹 서버에서 mod_rewrite와 유사한 기능을 설정하는 일반적인 방법의 종류를 나열하였습니다.
- .htaccess 파일: .htaccess 파일은 디렉토리 단위에서 설정을 적용하는 데 사용되는 파일입니다. 웹 서버의 AllowOverride 옵션이 허용된 경우, 해당 디렉토리에 .htaccess 파일을 작성하고 내용에 URL 재작성 규칙을 포함시킬 수 있습니다.
- 웹 서버 설정 파일 (예: httpd.conf 또는 apache2.conf): Apache 웹 서버의 메인 설정 파일에 직접 URL 재작성 규칙을 작성할 수 있습니다. 이를 위해서는
<Directory>
또는<VirtualHost>
섹션 내에<IfModule mod_rewrite.c>
블록을 추가하고 규칙을 작성해야 합니다. <Location>
블록: 특정 URL 경로에 대해 URL 재작성 규칙을 설정하려는 경우,<Location>
블록을 사용하여 해당 URL 경로에 대한 규칙을 작성할 수 있습니다.<VirtualHost>
섹션: 가상 호스팅을 사용하는 경우,<VirtualHost>
섹션 내에서 URL 재작성 규칙을 작성할 수 있습니다. 이를 통해 특정 가상 호스트에 대한 URL 재작성 규칙을 설정할 수 있습니다.- RewriteMap 지시문: RewriteMap 지시문을 사용하여 매핑 테이블을 생성하고, URL 재작성 규칙에 동적인 데이터를 적용할 수 있습니다. 매핑 테이블은 정적 파일 또는 외부 프로그램을 통해 작성될 수 있습니다.
이러한 방법들은 Apache 웹 서버의 다양한 설정 영역에서 URL 재작성과 관련된 기능을 구현하는 데 사용됩니다. 선택한 방법은 개발자의 환경과 요구에 따라 다를 수 있으며, 서버 설정 파일의 구성과 환경에 따라 다르게 적용될 수 있습니다.
작동이 안될 때 조치사항
아파치에서 URL 재작성이 제대로 작동하지 않는 것은 대부분 위에서 언급한 설정부분이 잘못되어 있는 경우가 클것 같습니다. 다음의 조치사항을 다시한번 확인해 보는게 좋을것 같네요.
- AllowOverride 확인:
.htaccess
파일에 작성된 URL 재작성 규칙이 제대로 작동하려면, 해당 디렉토리 또는 가상 호스팅에 대해AllowOverride All
또는AllowOverride FileInfo
설정이 필요합니다. 설정 파일에서 해당 디렉토리 또는 가상 호스팅의<Directory>
또는<DirectoryMatch>
섹션에서 AllowOverride 옵션을 확인하고 설정해야 합니다.
- 모듈 활성화 확인:
- mod_rewrite 모듈이 활성화되어 있는지 확인해야 합니다. 웹 서버의 모듈 목록에서 mod_rewrite 모듈이 나열되어 있는지 확인하고, 필요한 경우 모듈을 활성화해야 합니다. Ubuntu에서는
sudo a2enmod rewrite
명령을 실행하여 mod_rewrite 모듈을 활성화할 수 있습니다.
- mod_rewrite 모듈이 활성화되어 있는지 확인해야 합니다. 웹 서버의 모듈 목록에서 mod_rewrite 모듈이 나열되어 있는지 확인하고, 필요한 경우 모듈을 활성화해야 합니다. Ubuntu에서는
- 파일 및 디렉토리 경로 확인:
- .htaccess 파일의 위치와 파일 이름을 확인해야 합니다. 웹 서버의 DocumentRoot 디렉토리에 .htaccess 파일이 있는지 확인하고, 파일 이름이
.htaccess
로 정확히 작성되어 있는지 확인합니다. 또한, 파일과 디렉토리의 권한도 확인하여 적절한 접근 권한이 부여되었는지 확인해야 합니다.
- .htaccess 파일의 위치와 파일 이름을 확인해야 합니다. 웹 서버의 DocumentRoot 디렉토리에 .htaccess 파일이 있는지 확인하고, 파일 이름이
- RewriteBase 설정:
.htaccess
파일 내에서 RewriteBase 지시문을 사용하여 기본 경로를 설정할 수 있습니다. RewriteBase를 사용하여 서버의 기본 경로를 설정하고, 재작성 규칙에 적절한 상대 경로를 사용하도록 합니다.
- 로그 확인:
- 아파치 웹 서버의 에러 로그를 확인하여 재작성과 관련된 오류 메시지나 경고를 찾습니다. 에러 로그를 통해 어떤 문제가 발생하고 있는지 파악할 수 있습니다.
- 웹 서버 재시작:
- 설정 변경을 적용하기 위해 웹 서버를 재시작해야 할 수 있습니다. Ubuntu에서는
sudo service apache2 restart
명령을 사용하여 Apache 서버를 재시작하고, CentOS나 Fedora에서는sudo service httpd restart
명령을 사용합니다.
- 설정 변경을 적용하기 위해 웹 서버를 재시작해야 할 수 있습니다. Ubuntu에서는
위의 조치사항을 따라가며 설정을 확인하고 수정하면, URL 재작성을 제대로 작동시킬 수 있습니다. 문제가 지속되면 에러 로그와 함께 추가적인 디버깅을 수행하여 문제를 해결할 수도 있습니다.