Apache HTTP Server Version 2.5

�� 문��� mod_rewrite
참조 문ì��ë¥� ë³´ì¶©�©ë����.
mod_rewrite �¬ì�©ì�� ������ 기본 ê°�����
�¤ë��©ë����. �¤ë¥¸ 문ì������ �� ���¸í�� �¤ë£¨ì§�ë§�, �� 문ì����
�보�� �������� �� ������ �� �������.
Apache 모� mod_rewrite�� URL 조���
�������� ë°©ë��� ��ê³µí���� 매ì�� ê°��¥í��ê³� ��êµ��� 모ë��������.
�´ë�� �¬ì�©í��ë©� ������ ê±°ì�� 모ë�� ������ URL �¬ì���±ì�� ������ ��
���µë����. ê·¸ë�¬ë�� �¤ì�� ë³µì�¡í��ë©� ì´�ë³´ì����ê²� �������� ��
���µë����. ���� �¤ì��ë¡� 무ì���� ����ì§� �´í�´í��ì§� ��ê³� �¬ì����
ê·�ì¹��� ë§�ë²��� 주문ì²��� ì·¨ê����� ê²½í�¥ì�� ���µë����.
�� 문ì���� �´í���� �´ì�©ì�� �¨ì���� 맹목���¼ë� ë³µì�¬ë���� ê²��� ������ �´í�´ë����ë¡� ì¶©ë��� ë°°ê²½ ì§����� ��ê³µí��ê³��� �©ë����.
ë§��� �¼ë����� URL ì¡°ì�� ��������
mod_rewrite�� ��� 기�과 복��� �������
���¤ë�� ê²��� 기ì�µí��������. ê°��¨í�� ��������
mod_alias��
���� ���¤í���� URL 매í��
문�� 참조��������.
ë§�ì§�ë§��¼ë� ì§�����ê¸� ���� LogLevel ì§����´ë�� �¬ì�©í����
mod_rewrite�� �� ��벨� trace ��� �
����ë¡� 구ì�±í��������. �´ë�� �������� ���� ��ë³´ë�� ��ê³µí�� ��
��ì§�ë§�, mod_rewrite �¤ì���� 문ì��ë¥�
��ë²�ê¹����� �� ������������. ê°� ê·�ì¹��� �´ë�»ê� ì²�리ë����ì§�
������ ���¤ì£¼ê¸� ��문ì������.
mod_rewrite�� Perl
�¸í�� ��ê·� ������ �´í��ë¥� �¬ì�©í�©ë����. �� 문ì��������
��ê·� �������� ���� ���¸í�� 참조ë¥� ��ê³µí��ì§� ���µë����.
�´ë�� ���� PCRE 매ë�´ì��
���´ì�, Perl
��ê·� ������ 매ë�´ì�� ���´ì� ë°�
Jeffrey
Friedl�� Mastering Regular Expressions(3���� 2006����
ì¶�������ì§�ë§� ��ê·� ������ 구문�� 본ì����¼ë� ë³�ê²½ë��ì§� �����¼ë©°
�� 주ì���� ���� ê²°ì������ ì°¸ê� ��ë£�ë¡� �¨ì�� ���µë����)ë¥�
ê¶��¥í�©ë����.
�� 문������� RewriteRule�� ���� 주문��
���� ê³¼í���� ê³µì���� ����ë¡� �������´ì� ���� ��ì¤����� ������기ì��
ì¶©ë��� ��ê·� ������ �´í��ë¥� ��ê³µí��ê³��� �©ë����.
�¤ì���� ��ê·� ������ê³� RewriteRule�� ���±í��ê¸� ����
������ ìµ������� 구ì�� ����������. �´ê��¤ì�� ������ ��ê·� ������
�´í��ë¥� �����´ì��� ��ì§�ë§� ������기ì�� ì¢��� ì¶�ë°����´ë©°, 기본����
��ê·� �������� �½ê� ����ë§��� ê²��� ���±í���� �� ������ ��
�������.
| 문� | ��� | ���� |
|---|---|---|
. |
������ �¨ì�� 문ì���� �¼ì� | c.t�� cat, cot,
cut �±ê³¼ �¼ì� |
+ |
�´ì�� �¼ì�ë¥� �� ë²� �´ì�� ë°�ë³� | a+�� a, aa,
aaa �±ê³¼ �¼ì� |
* |
�´ì�� �¼ì�ë¥� 0ë²� �´ì�� ë°�ë³� | a*�� a+ê°� �¼ì����� 모ë�� ê²�ê³�
�¼ì���ì§�ë§� ë¹� 문ì���´ê³¼�� �¼ì� |
? |
�¼ì�ë¥� �������¼ë� ë§��� | colou?r�� color��
colour�� �¼ì� |
\ |
�¤ì�� 문ì��ë¥� �´ì�¤ì��´í�� | \.�� ������ �¤ë��� ������ �¨ì�� 문ì��ê°�
���� .(��)ê³� �¼ì� |
^ |
�µì»¤�¼ê� ��ë©�, 문ì���´ì�� ����ê³� �¼ì� | ^a�� aë¡� �������� 문ì���´ê³¼ �¼ì� |
$ |
�¤ë¥¸ �µì»¤, 문ì���´ì�� ��ê³� �¼ì� | a$�� aë¡� ������ 문ì���´ê³¼ �¼ì� |
( ) |
�¬ë�� 문ì��ë¥� �¨ì�� �¨ì��ë¡� 그룹����ê³� ��참조���� �¬ì�©í�� �¼ì�ë¥� 캡ì� | (ab)+�� abababê³� �¼ì� -
ì¦�, +ê°� 그룹�� ���©ë��.
��참조�� ���� ���¸í�� �´ì�©ì�� ����ë¥�
참조 |
[ ] |
문ì�� �´ë���� - 문ì�� ì¤� ������ �¼ì� | c[uoa]t�� cut, cot ����
catê³� �¼ì� |
[^ ] |
ë¶��� 문ì�� �´ë���� - ì§�����ì§� ���� 모ë�� 문ì���� �¼ì� | c[^/]t�� cat ���� c=t��
�¼ì���ì§�ë§� c/t���� �¼ì���ì§� ���� |
mod_rewrite���� ! 문���
��ê·� ������ ���� �¬ì�©í���� ë¶����� �� ���µë����. ì¦�, 문ì���´ì��
��머ì� ������ê³� �¼ì���ì§� ���� ê²½ì�°ì��ë§� �¼ì��� ê²��¼ë�
�주����.
�¬ê¸°�� 기ì�µí�´ì�� �� ì¤����� ���� ���µë����:
Pattern�´ë�� CondPattern ì¤� ��������
ê´��¸ë�� �¬ì�©í�� ��ë§��� �´ë����¼ë� ��참조ê°� ���±ë��ë©�
문ì���� $Nê³� %N(���� 참조)�¼ë�
�¬ì�©í�� �� ���µë����. �´ê��¤ì��
RewriteRule��
Substitution 매ê�ë³��� ����
RewriteCond��
TestString 매ê�ë³���ë¥� ���±í���� �� �¬ì�©í�� ��
���µë����.
RewriteRule
�¨í�´ì�� 캡ì��� (ì§�ê´��� ë°�����) 모ë�� ����
RewriteCond
ì§����´ì���� �¬ì�©í�� �� ���µë����.
RewriteRule
�������� �� 조건보� 먼� ������ ��문�����.
그림 1�� ��참조ê°� ���¥ì�� ���� ���¬ë���� ��ì¹��� RewriteRule, RewriteCond 매ì¹�� ��ë¦��� ë³´ì�¬ì�����. �¤ì�� �¥ì���� �´ë�¬í�� ��참조ë¥� �¬ì�©í���� ë°©ë��� ��구í�� ê²��´ë��ë¡�, ì²����� �¤ì�� ������ê²� ��ê»´ì�¸ë�� ê±±ì����ì§� ë§�������.

그림 1: ê·�ì¹��� �µí�� ��참조 ��ë¦�.
�� �������� /test/1234�� ���� ��ì²��� /admin.foo?page=test&id=1234&host=admin.example.com�¼ë� ë³����©ë����.
RewriteRule��
공백�¼ë� 구ë��� �� ê°��� �¸ì��ë¡� 구ì�±ë�©ë����. �¸ì���� �¤ì��ê³�
ê°��µë����:
Pattern�� ��ê·� ������������. ì²�������(ì²� ë²�ì§� �¬ì���� ê·�ì¹��´ê±°�� ì¹����� ë°�����ê¸� ��ê¹�ì§�) �¤ì�´ì�¤ë�� ��ì²��� URL ê²½ë�(�¸ì�¤í�¸ë� �¤ë��� 쿼리 문ì���´ì�� ������ �����´ë�� 물ì���� ��ê¹�ì§��� ë¶�ë¶�) ���� ������리ë� 컨í���¤í�¸ì������ ê·�ì¹��� ������ ������리ì�� �������� ��ì²� ê²½ë��� ë¹�êµ��©ë����. ì¹����� ë°�����ë©� �´í���� ê·�ì¹��� ì¹����� ê°�ê³� ë¹�êµ��©ë����.

그림 2: RewriteRule ì§����´ì�� 구문.
Substitution�� ��ì²´ì���¼ë� �¤ì�� �� ê°�ì§� ì¤� ������ �� ���µë����:
RewriteRule "^/games" "/usr/local/games/web/puzzles.html"
�´ê��� Alias
ì§����´ì�� ë§�ì°¬ê�ì§�ë¡� ��ì²��� ���� ���¤í���� ������ ��ì¹���
매í���©ë����.
RewriteRule "^/games$" "/puzzles.html"
DocumentRootê°�
/usr/local/apache2/htdocsë¡� �¤ì���� ê²½ì�� ��
ì§����´ë�� http://example.com/games�� ���� ��ì²���
/usr/local/apache2/htdocs/puzzles.html ê²½ë�ë¡�
매í���©ë����.
RewriteRule "^/product/view$" "http://site2.example.com/seeproduct.html" [R]
�´ê��� �´ë�¼ì�´ì�¸í�¸ì��ê²� ì§����� URL�� ���� �� ��ì²��� ����ë¡� ì§����©ë����.
/usr/)�� ���� ���¤í���� ì¡´ì�¬í���� ë°�ë©�, 2�� ê²½ì�� ì¡´ì�¬í��ì§� �����¤ë�� ê²�������. (ì¦�, ���� ���¤í���� /bar/�¼ë�� 루í�� ��ì¤� ������리ê� ���µë����.)Substitution�� Pattern�� ���� �¼ì��� �¤ì�´ì�¤ë�� URL ê²½ë��� ë¶�ë¶��� ���� ��참조ë¥� �¬í�¨í�� ���� ���µë����. �¤ì���� ê³��¤í��������:
RewriteRule "^/product/(.*)/view$" "/var/web/productdb/$1"
��� $1�� Pattern�� ��� ����
�������� ���� �¼ì��� ���¤í�¸ë� ��ì²´ë�©ë����. ��ë¥� �¤ì��,
http://example.com/product/r14df/view�� ����
����� /var/web/productdb/r14df 경��
매í���©ë����.
ê´��� ���� �������� �� �´ì���� ê²½ì�� ë³���
$1, $2, $3 �±ì��
����ë¡� �¬ì�©í�� �� ���µë����.
RewriteRule��
������ ê·�ì¹� ���� ���� �´ì���� ����ê·¸ë�� ���©í���� ������ ��
���µë����. ��ë¥� �¤ì��, ê·�ì¹��� ë§¤ì¹ ������ [NC]
����ê·¸ë�� ���©í���� ����문ì��ë¥� 구ë���ì§� ����ë¡� ë§��� ��
���µë����:
RewriteRule "^puppy.html" "smalldog.html" [NC]
�¬ì�� ê°��¥í�� ����ê·�, ê·� ��ë¯� ë°� ������ ���� ���¸í�� �´ì�©ì�� �¬ì���� ����ê·� 문ì��ë¥� 참조��������.
���� �´ì���� RewriteCond
ì§����´ë�� �¬ì�©í���� �¤ì��
RewriteRule�� ������
���� ��ì²� ������ ������ �� ���µë����. ì²� ë²�ì§� �¸ì���� ��ì²���
�¹ì�±ì�� �¤ë����� ë³����´ê�, �� ë²�ì§� �¸ì���� ë³����� �¼ì��´ì�� ����
��ê·� �������´ë©°, �� ë²�ì§� ������ �¸ì����
�¼ì� ��ê°� ë°©ì���� �������� ����ê·� 목ë�������.

그림 3: RewriteCond ì§����´ì�� 구문
��ë¥� �¤ì��, �¹ì�� IP ë²����� 모ë�� ��ì²��� �¤ë¥¸ ��ë²�ë¡� ë³´ë�´ë�¤ë©´ �¤ì���� �¬ì�©í�� �� ���µë����:
RewriteCond "%{REMOTE_ADDR}" "^10\.2\."
RewriteRule "(.*)" "http://intranet.example.com$1"
�� �´ì���� RewriteCondê°�
����� 경� RewriteRule��
���©ë���¤ë©´ 모ë�� ì¡°ê±´�� �¼ì��´ì�� �©ë����. ��ë¥� �¤ì��, 쿼리
문ì���´ì�� "hack"�´ë�¼ë�� �¨ì�´ê� �¬í�¨ë�� ��ì²��� ê±°ë�����, "go"�¼ë��
�¨ì�´ê� �¬í�¨ë�� ì¿��¤ê� ���� ê²½ì�°ë�� ���¸í���¤ë©´ �¤ì���� �¬ì�©í�� ��
���µë����:
RewriteCond "%{QUERY_STRING}" "hack"
RewriteCond "%{HTTP_COOKIE}" !go
RewriteRule "." "-" [F]
�������� ë¶��� �¼ì�ë¥� ì§�����ë¯�ë¡�, ì¿��¤ì�� "go"ê°� �¬í�¨ë��ì§� ���� ê²½ì�°ì��ë§� ê·�ì¹��� ���©ë�©ë����.
RewriteCond��
�¬í�¨ë�� ��ê·� �������� �¼ì��� ë³��� %1,
%2 �±ì�� �¬ì�©í����
RewriteRule��
Substitution�� �¼ë�ë¡� �¬ì�©í�� �� ���µë����.
��ë¥� �¤ì��, �¬ì�´í�¸ì�� ��ê·¼í���� �� �¬ì�©ë�� �¸ì�¤í�¸ë��� �°ë��
��ì²��� �¤ë¥¸ ������리ë� ë³´ë�´ë�� �¤ì��ê³� ê°��µë����:
RewriteCond "%{HTTP_HOST}" "(.*)"
RewriteRule "^/(.*)" "/sites/%1/$1"
http://example.com/foo/bar�� ���� ��ì²��´ë©´
%1�� example.com�� �¬í�¨í��ê³�
$1�� foo/barë¥� �¬í�¨í�©ë����.
RewriteMap ì§����´ë��
�¬ì���±ì�� ������ �¸ë� �¨ì��ë¥� �¸ì����� ë°©ë��� ��ê³µí�©ë����.
�´ì�� ���� ���¸í�� �´ì�©ì�� RewriteMap
ë³´ì¶© 문ì������ �¼ì���©ë����.
�¬ì���±ì�� �¼ë����¼ë� ì£� ��ë²� �¤ì��(
<Directory>
�¹ì�� �¸ë�)���� ����
<VirtualHost>
컨í���´ë�� �´ì���� 구ì�±ë�©ë����. �´ê��� �¬ì���±ì�� �������� ê°���
�¬ì�� ë°©ë��´ë©° ê¶��¥ë�©ë����. ê·¸ë�¬ë�� �½ê��� ì¶�ê°� ë³µì�¡ì�±ì��
������
<Directory>
�¹ì���´ë�� .htaccess
���������� �¬ì���±ì�� ������ �� ���µë����. �� 기ì����
������리ë� �¬ì���±ì�´ë�¼ê� �©ë����.
��ë²�ë³� �¬ì���±ê³¼�� 주ì�� ì°¨ì�´ì���� .htaccess
���¼ì�� �¬í�¨ë�� ������리ì�� ê²½ë� �����¬ê�
RewriteRule����
매ì¹��ê¸� ���� ��ê±°ë���¤ë�� ê²�������. ����
RewriteBase�
�¬ì�©í���� ��ì²��� �¬ë�르ê� 매í������ë¡� �´ì�� �©ë����.