Apache HTTP Server Version 2.5

�� 문��� mod_rewrite
참조 문ì��ë¥� ë³´ì¶©�©ë����.
RewriteMap ì§����´ì��
�¬ì�©ë��� �¤ë���ê³� �¤ì���� RewriteMap ������ ����ë¥� ��ê³µí�©ë����.
���
int: �´ë� �¨ì��
txt: �¼ë� ���¤í�� ë§�
rnd: 무ì���� �¼ë� ���¤í��
dbm: DBM �´ì�� ����
prg: �¸ë� �¬ì���� ��ë¡�ê·¸ë��
dbd ���� fastdbd: SQL 쿼리
����
RewriteMap ì§����´ë��
RewriteRule ����
RewriteCond ì§����´ì��
컨í���¤í�¸ì���� �¸ì��� �� ���� �¸ë� �¨ì��ë¥� ��������
��ê·� ������ë§��¼ë��� ��ë¬� ë³µì�¡í��ê±°ë�� ��ë¬� ��문í����
�¬ì���±ì�� �����©ë����. �� ì¡°í���� ���¤ë�� ���� �¹ì����
���´ë��ê³� RewriteMap
참조 문ì���� �´ê±°�� ���� ì¤� ������ �� ���µë����.
RewriteMap
ì§����´ì�� 구문�� �¤ì��ê³� ê°��µë����:
RewriteMap MapName MapType:MapSource
MapName�� ë§µì�� ���¹í���� ������ �´ë��´ë©°, �´í�� ì§����´ì���� �¬ì�©í�©ë����. �¸ì���� �¤ì�� 구문�� �µí�� ë§µì�� ���¬ë�©ë����:
${ MapName : LookupKey
}
${ MapName :
LookupKey | DefaultValue }
�´ë�¬í�� 구조ê°� ë°�����ë©� ë§� MapName�� ì¡°í����ê³� �� LookupKeyê°� ê²����©ë����. �¤ê� ë°�견ë��ë©� ë§� �¨ì�� 구조�� SubstValueë¡� ��ì²´ë�©ë����. �¤ë�� ì°¾ì� 못í��ë©� DefaultValueë¡� ��ì²´ë��ê±°ë��, DefaultValueê°� ì§�����ì§� ���� ê²½ì�� ë¹� 문ì���´ë� ��ì²´ë�©ë����.
��ë¥� �¤ì�� �¤ì��ê³� ê°���
RewriteMap��
������ �� ���µë����:
RewriteMap examplemap "txt:/path/to/file/map.txt"
그�면 RewriteRule����
�¤ì��ê³� ê°��� �� ë§µì�� �¬ì�©í�� �� ���µë����:
RewriteRule "^/ex/(.*)" "${examplemap:$1}"
ë§µì���� ��무ê��� ì°¾ì� 못í�� ê²½ì�°ë�� ��ë¹����� 기본ê°��� ì§����� �� ���µë����:
RewriteRule "^/ex/(.*)" "${examplemap:$1|/not_found.html}"
RewriteMap ì§����´ë��
<Directory> �¹ì���´ë��
.htaccess ���¼ì���� �¬ì�©í�� �� ���µë����. ��ë²� ����
ê°����¸ì�¤í�� 컨í���¤í�¸ì���� ë§µì�� ���¸í�´ì�� �©ë����. �¼ë�� ���±ë�� ë§µì��
�´ë�� ë²����� RewriteRuleê³�
RewriteCond ì§����´ì����
�¬ì�©í�� �� ���µë����. �´ë�� ë²������� ������ ��
���� �������.
�¤ì�� �¹ì�������� �¬ì�©í�� �� ���� �¤ì���� MapType�� �¤ë���ê³� ê°�ê°��� ����ë¥� ��ê³µí�©ë����.
MapType�� int�� ê²½ì�� MapSource�� �¬ì�� ê°��¥í��
�´ë� RewriteMap
�¨ì�� ì¤� ����������. 모ë�� ���±ì����
ap_register_rewrite_mapfunc APIë¥� �±ë�����
ì¶�ê°� �´ë� �¨ì��ë¥� ��ê³µí�� �� ���µë����.
기본���¼ë� ��ê³µë���� �¨ì���� �¤ì��ê³� ê°��µë����:
�´ë�¬í�� �¨ì�� ì¤� ����ë¥� �¬ì�©í���¤ë©´ int �¨ì��ë¥� 참조����
RewriteMap��
���±í�� �¤ì�� RewriteRule���� �¬ì�©í�©ë����:
URIë¥� 모ë�� ��문ì�� ë²����¼ë� 리ë�¤ì�´ë����
RewriteMap lc int:tolower
RewriteRule "(.*)" "${lc:$1}" [R]
�¬ê¸°�� ��ê³µë�� ������ �¤ë� 목ì���¼ë�ë§� ��ê³µë��ë©�
ê¶��� �¬í���� ��������. URL�� ����문ì�� 구ë� ����
ë§��¤ë�¤ë©´ ���� mod_speling �¬ì�©ì��
ê³��¤í��������.
MapType�� txt�� 경� MapSource��
�� ì¤��� ������ 공백�¼ë� 구ë��� ��/ê°� ���� �¬í�¨í����
�¼ë� ���¤í�� 매í�� ���¼ì�� ���� ���¤í�� ê²½ë�������.
�������¼ë� '#' 문ì��ë¡� �������� 주ì���� �¬í�¨ë�� ��
���µë����.
���¨í�� ���¤í�� �¬ì���� ë§� ���¼ì�� �¤ì��ê³� ê°��� 구문�� ê°�ì§�����:
# 주� �
MatchingKey SubstValue
MatchingKey SubstValue # 주�
RewriteMap��
�¸ì���ë©� �¸ì��ê°� ì¤��� ì²� ë²�ì§� �¸ì������ ê²�����ê³�,
ë°�견ë��ë©� ì¹��� ê°��� ë°����©ë����.
��ë¥� �¤ì��, 기ì�µí��ê¸� �¬ì�� URL�� ���� ���� �´ë��� ���� IDë¡� ë³������� ë§� ���¼ì�� �¬ì�©í�� �� ���µë����:
�������� IDë¡��� �¤ì��
RewriteMap product2id "txt:/etc/apache2/productmap.txt"
RewriteRule "^/product/(.*)" "/prods.php?id=${product2id:$1|NOTFOUND}" [PT]
�¬ê¸°�� prods.php �¤í�¬ë¦½�¸ë�� ì¡°í�� ë§µì����
������ ì°¾ì� 못í���� �� id=NOTFOUND �¸ì��ë¥�
ë°��¼ë©´ �´ë�»ê� �´ì�� ����ì§� ��ê³� ���¤ê� ê°����©ë����.
/etc/apache2/productmap.txt ���¼ì����
�¤ì���� �¬í�¨ë�©ë����:
##
## productmap.txt - �������� ID��� � ����
##
television 993
stereo 198
fishingrod 043
basketball 418
telephone 328
�°ë�¼ì�� http://example.com/product/television��
������ RewriteRule��
���©ë��ê³� ��ì²��� �´ë����¼ë�
/prods.php?id=993�� 매í���©ë����.
.htaccess ���¼ì���� �¬ì�©í��
ê³����´ë�¼ë©´, 무ì���´ë�� �¼ì�����ë¡� �¬ì���� �¨í�´ì���� ����
�¬ë����ë¥� ��ê±°í�´ì�� �©ë����:
RewriteRule "^product/(.*)" "/prods.php?id=${product2id:$1|NOTFOUND}" [PT]
ì¡°í���� �¤ë�� ë§� ���¼ì�� mtime(���� ��ê°�)��
ë³�ê²½ë��ê±°ë�� httpd ��ë²�ê°� �¬ì������ ��ê¹�ì§� httpd�� ����
ìº����©ë����. �´ë�� ë§��� ��ì²��� ���� �¸ì����� ë§µì��
�±ë�¥ì�� �¥ì�����µë����.
MapType�� rnd�� ê²½ì�� MapSource�� �¼ë�
���¤í�� 매í�� ���¼ì�� ���� ���¤í�� ê²½ë��´ë©°, ê°� ì¤�����
�¤ì�� |ë¡� 구ë��� ���� �´ì���� ê°��� �¬í�¨ë�©ë����.
�¤ê� �¼ì���ë©� �� ê°� ì¤� ����ê°� 무ì����ë¡� �����©ë����.
��ë¥� �¤ì��, 리ë��� ��ë¡���ë¥� �µí�� 무ì���� ë¶��� ë¶��°ì�� ���� �¤ì�� ë§� ���¼ê³¼ ì§����´ë�� �¬ì�©í�� �� ���µë����. �´ë�¸ì��� 'static' ���� ��ë²� ì¤� ����ë¡� ���¡ë��ê³�, ��머ì��� 'dynamic' ���� ��ë²� ì¤� ����ë¡� ���¡ë�©ë����.
##
## map.txt -- �¬ì���� ë§�
##
static www1|www2|www3|www4
dynamic www5|www6
�¤ì�� ì§�����
RewriteMap servers "rnd:/path/to/file/map.txt"
RewriteRule "^/(.*\.(png|gif|jpg))" "http://${servers:static}/$1" [NC,P,L]
RewriteRule "^/(.*)" "http://${servers:dynamic}/$1" [P,L]
�°ë�¼ì�� �´ë�¸ì�ê°� ��ì²���ê³� �� ê·�ì¹� ì¤� ì²� ë²�째ê�
�¼ì���ë©� RewriteMap��
ë§� ���¼ì���� 문ì���� static�� ì¡°í����ê³�
ì§����� �¸ì�¤í�¸ë� ì¤� ����ë¥� 무ì����ë¡� ë°�������
RewriteRule
�������� �¬ì�©í�©ë����.
��ë²� ì¤� ����ê°� ������ ��ë¥��� ���´ë�¤ë©´(��ë¥� �¤ì�� ��ë²� ì¤� ����ê°� �� ë§��� ë©�모리ë¥� ê°�ì§�ê³� ���� �� ë§��� ��ì²��� ì²�리í�� �� ���� ê²½ì��) ë§� ���¼ì�� �´ë�� ��ë²�ë¥� �� ë§��� ���´í��ë©� �©ë����.
static www1|www1|www2|www3|www4
MapType�� dbm�� 경� MapSource��
매í���� �¬ì�©í�� ��/ê°� ���� �¬í�¨í���� DBM �°ì�´í�°ë��´ì��
���¼ì�� ���� ���¤í�� ê²½ë�������. �´ê��� txt
맵과 ������ ê°��� ë°©ì���¼ë� ������ì§�ë§�, DBM�� �¸ë�±ì�±ë����
���� ë°�ë©� ���¤í�� ���¼ì�� ê·¸ë��ì§� ���¼ë��ë¡� �¨ì�� ë¹�ë¦�����.
�´ë�� �µí�� ������ �¤ì�� �� ë¹�르ê� ��ê·¼í�� �� ���µë����.
�������¼ë� �¹ì�� dbm ������ ì§����� �� ���µë����:
RewriteMap examplemap "dbm=sdbm:/etc/apache/mapfile.dbm"
������ sdbm, gdbm,
ndbm ���� db�� �� ���µë����.
ê·¸ë�¬ë�� httpd ��ì²´ê� ë¹����� �� �¬ì�©ë�� ê²�ê³� �¼ì�����
�¬ë�ë¥� DBM �¼ì�´ë��¬ë¦¬ë¥� �¬ì�©í��ë¯�ë¡� Apache HTTP Server��
�¨ê� ��ê³µë���� httxt2dbm
���¸ë¦¬�°ë�� �¬ì�©í���� ê²��� ì¢��µë����.
dbm ���¼ì�� ���±í���¤ë©´ 먼ì�� txt
�¹ì���� �¤ë��� ��ë¡� ���¤í�� ë§� ���¼ì�� ���±í�©ë����. ê·¸ë�� �¤ì��
httxt2dbm�� �¤í���©ë����:
$ httxt2dbm -i mapfile.txt -o mapfile.map
ê·¸ë�� �¤ì�� RewriteMap
ì§����´ì���� ê²°ê³¼ ���¼ì�� 참조�� �� ���µë����:
RewriteMap mapname "dbm:/etc/apache/mapfile.map"
�¼ë� dbm ���������� ê³µí�� 기본 �´ë��� ê°�ì§� �� �´ì����
���¼ì�� ���±ë�©ë����. ��ë¥� �¤ì�� mapfile.map.dirê³�
mapfile.map.pag�¼ë�� �� ���¼ì�� ���� �� ���µë����.
�´ê��� �����´ë©° RewriteMap
ì§����´ì���� 기본 �´ë��� mapfile.mapë§� �¬ì�©í��ë©�
�©ë����.
ì¡°í���� �¤ë�� ë§� ���¼ì�� mtime(���� ��ê°�)��
ë³�ê²½ë��ê±°ë�� httpd ��ë²�ê°� �¬ì������ ��ê¹�ì§� httpd�� ����
ìº����©ë����. �´ë�� ë§��� ��ì²��� ���� �¸ì����� ë§µì��
�±ë�¥ì�� �¥ì�����µë����.
MapType�� prg�� 경� MapSource��
매í�� ������ ��ê³µí�� �¤í�� ê°��¥í�� ��ë¡�ê·¸ë�¨ì�� ���� ���¤í��
ê²½ë�������. �´ê��� ì»´í���¼ë�� ë°��´ë��ë¦� ���¼ì�´ê±°��
Python�´ë�� Perlê³� ê°��� �¸í�°í��리í�� �¸ì�´ì�� ��ë¡�ê·¸ë�¨ì�� ��
���µë����.
�� ���그�� Apache HTTP Server� ������ �� �� �
�������, STDIN� STDOUT��
�µí�� �¬ì���� ��ì§�ê³� �µì���©ë����. ê°� ë§� �¨ì�� ì¡°í���� ����
�¤ê� ��ë¡�ê·¸ë�¨ì�� STDIN�� 기ë���ê³� ê·� �¤ì��
ì¤�ë°�ê¿� 문ì��ê°� �µë����. ��ë¡�ê·¸ë�¨ì�� STDIN����
�� ì¤��� �½ê�(ì¤�ë°�ê¿� �¬í��) ���µì��
STDOUT�� ì¤�ë°�ê¿��¼ë� ������ �� ì¤�ë¡�
���±í�´ì�� �©ë����. �¤ì���� ì¤�ë°�ê¿� 문ì��ê°� �¬í�¨ë��ì§�
���¼ë©°, ì¤�ë°�ê¿��� �¬í�¨ë�� �¤ê� ë°�견ë��ë©� ì¡°í��ê°�
�¤í�¨í�©ë����.
�������� ì¡°í�� ê°��� ���¼ë©´ ë§� ��ë¡�ê·¸ë�¨ì��
�� 문ì�� 문ì���� "NULL"�� ë°������� �´ë��
�����´ì�� �©ë����. �� ë¹�êµ��� ����문ì��ë¥� 구ë���ì§�
���¼ë��ë¡� "null", "Null" �±ë�� �¤í�¨í�� ì¡°í��ë¡�
ì²�리ë�©ë����. ê²°ê³¼���¼ë� 매í�� ��ë¡�ê·¸ë�¨ì�� 매í���� ê°��¼ë�
리í�°ë�� 문ì���� "NULL"�� ë°������� ê²��� ë¶�ê°��¥í�©ë����.
���그�� STDERR�� httpd ��
��ë¡��¸ì�¤ì���� ������ë¯�ë¡� ��ë¡�ê·¸ë�¨ì�� STDERR��
�°ë�� 모ë�� ê²��� httpd�� ��ì²� �¤ë� ì¶��¥ê³¼ ê°��� ê³�(�¼ë����¼ë�
ErrorLog)��
기ë��©ë����.
�¸ë� �¬ì���� ��ë¡�ê·¸ë�¨ì�� RewriteEngine��
on�¼ë� �¤ì����ì§� ���� 컨í���¤í�¸ì����
������ ê²½ì�� ������ì§� ���µë����.
기본���¼ë� �¸ë� �¬ì���� ��ë¡�ê·¸ë�¨ì�� httpdë¥� ������
user:group�¼ë� �¤í���©ë����. �´ê��� UNIX ���¤í������
RewriteMap��
�� ë²�ì§� �¸ì��ë¡� username:groupname �����¼ë�
�¬ì�©ì�� �´ë�ê³� 그룹 �´ë��� ���¬í���� ë³�ê²½í�� �� ���µë����.
�� 기ë�¥ì�� ��ë¡�ê·¸ë�¨ê³¼�� �������� �µì���� ������
rewrite-map 뮤í���¤ë�� ���©í�©ë����.
뮤í���� ë©�커ë��ì¦�ê³� ��ê¸� ���¼ì�� Mutex ì§����´ë� 구ì�±í�� ��
���µë����.
�¬ê¸°�� ��ì²� URI���� 모ë�� ����ë¥� ë°�ì¤�ë¡� ��ì²´í���� ê°��¨í�� ����ê°� ���� ���µë����.
�¬ì���� �¤ì��
RewriteMap d2u "prg:/www/bin/dash2under.py" apache:apache
RewriteRule "-" "${d2u:%{REQUEST_URI}}"
dash2under.py
#!/usr/bin/env python3
import sys
for line in sys.stdin:
print(line.strip().replace('-', '_'), flush=True)
print()�� flush=Trueë¥� ���¬í����
�´ë�� �����©ë����. ë²��¼ë��� I/O�� httpdê°� ì¶��¥ì�� 기ë�¤ë¦¬ê²�
��ë¯�ë¡� ë©�ì¶�ê²� �©ë����.SIGTERM��
���¡ë��ë©�, 3ì´� �´ë�´ì�� ì¢�ë£���ì§� ���¼ë©´
SIGKILL�� ���¡ë�©ë����.MapType�� dbd ���� fastdbd��
ê²½ì�� MapSource�� �¨ì�� �¸ì��ë¥� ë°��� �¨ì�� ê°��� ë°�������
SQL SELECT 문�����.
�� 문ì�� �¤í�����¤ë©´ �¬ë�ë¥� �°ì�´í�°ë��´ì�¤ë�� ê°�리í�¤ë��ë¡�
mod_dbdë¥� 구ì�±í�´ì�� �©ë����.
�� MapType���� �� ê°�ì§� ����ê°� ���µë����.
dbd MapType�� �¬ì�©í��ë©� ê°� ë§� ��ì²�ë§���
쿼리ê°� �¤í����ê³�, fastdbdë¥� �¬ì�©í��ë©�
�°ì�´í�°ë��´ì�� ì¡°í��ê°� �´ë����¼ë� ìº����©ë����. �°ë�¼ì��
fastdbdê°� �� �¨ì�¨ì���´ê� ë¹�르ì�ë§�,
��ë²�ê°� �¬ì������ ��ê¹�ì§� �°ì�´í�°ë��´ì�� ë³�ê²� �¬í����
ë°�����ì§� ���µë����.
쿼리ê°� �� �´ì���� ���� ë°�����ë©� ê²°ê³¼ �¸í�¸ì���� 무ì���� ���� �¬ì�©ë�©ë����.
RewriteMap myquery "fastdbd:SELECT destination FROM rewrite WHERE source = %s"
쿼리 �´ë��� SQL ì¤�ë¹��� 문ì�� ���´ë�ë¡� �°ì�´í�°ë��´ì�� ���¼ì�´ë��� ���¬ë��ë¯�ë¡� �°ì�´í�°ë��´ì�¤ì�� ������ 모ë�� ê·�ì¹�(����문ì�� 구ë� ��)�� �°ë�¼ì�� �©ë����.
RewriteMap ì§����´ë��
�¬ë�� ë²� �¬ì�©í�� �� ���µë����. ê°� 매í�� �¨ì���� ���� ������
RewriteMap ì§����´ë��
�¬ì�©í���� �¬ì���� ë§� ���¼ì�� ���¸í�©ë����.
������리ë� 컨í���¤í��(.htaccess ���¼ì�´ë��
<Directory>
��)������ 맵� ������ �� ����
������리ë� 컨í���¤í�¸ì���� �� ë§µì�� �¬ì������
ê²��� ê°��¥í�©ë����.