
ISAPI_Rewrite һλǿڱʾ URL 档 жҪӡڰ˵mod_Rewrite,  رΪMicrosoft Internet Information Server ΢ȫͼٶȷ2004 ꡣ  ıվURL ƻ, ƷΪ!

һЩISAPI_Rewrite Ĺؼô:

ٶ 
ISAPI_Rewrite Ǽ˿ٺ͸߶ȿ  ʹдΨһC/C++ 롢Win32 API ISAPI   ʹôơ йһ ݳûеݹԵ Ҫʱ䡣

ȫ 
ISAPI_Rewrite Ϊڱ  ܷվͬС ISP ṩ ͷȫǵûISAPI_Rewrite ǿ϶κ ñ仯ӰΨһطʹ߻ ISAPI_Rewrite లȫ, , һЩͨ ļлļӸӵĹ

 
ISAPI_Rewrite Ժʽ ʽȻ ʽҪдa Ƽ鴮 ȽϺ滻URLs a ʽ , ISAPI_Rewrite ޷ɵ ʹΪIIS    ֶڸϢ

Ҫ
ISAPI_Rewrite ṩһڹдд URLs ڽС ֧ʵϹ޵ֺ Ϲ޵Ӧṩһ ǿURL (ļСǿ 2Mb Ʒֹܵý컨)  URL  ȡڲΪHTTP ˮ, ɱ, URI,  ҿͻİ汾Ϣ

ĿӪURI (·Ϣѯʴ) HTTP ˮΪRFC 2068 ڷ(ȫ) վ ġ Ľܵд, proxying, ı䷽, ԭʼ ͻԴ http://www somesite com/path/file ext?parameter=value ISAPI_Rewrite ںɫ ISAPI_Rewrite д, ȥHTTP ˮ

дruleset ɹ(RewriteRule )  ֻƥ䷴URI жӦӦ(RewriteCond )  ǵĲԴ ISAPI_Rewrite ;  㷨 ζ, ʽʾѰ ; ƥ䷴봮 һֳɹĹӦõĽ ԭʼĵˮǿɿΪ  ֹͣһǰ(ķ, , ֹL ӱ) ƥ䡣

д·URI ɿͻҪ URI ܰѯ (ʺ) ҲָӶļ, 籾 绰, Ŀȡ

Proxiing ЧURI ڲԴ (i.e  ֹ) ͨ ISAPI 졣 ȷ, 洮ǺϷURI Э顢, ȡ  ˻ش

ı䷽򽫵·ͶһͻֱӷӦԸķ ָʾ(HTTP Ӧ302 ص㵹ˮ), ṩЧ URI Ϊһµص㡣 ʹ(RFC ľ 2068) ڸı䷽ָʾһ, ڰ Э顣 ָܸʾдֹͣ 򻯴

򱻴ֵ˳a ļ ISAPI_Rewrite (ȫ) Ⱥ ȻһԵվ(ָ)  û ݹתڴ(ȷ Ȧ), δһѭ

вURI ISAPI_Rewrite ԭʼĵ·Ϣѯʴ֮ǰ HTTP ˮ X дUrl. Ȼܱ ASP ʹServerVariables("HTTP_X_REWRITE_URL") 

ÿͶһʽο Щܱʹڸʽ֮(ʹ$N ䷨) ֮ ʽ(ʹ\N ䷨) ڲ졣 ЩοȫԵΪ RewriteRule ԺͶӦ RewriteCond 롣 Submatches Ŵʹ ʼһ RewriteCond (ķ) Ӧ RewriteRule.

򻯹ͼǿȫ ǿƼʹĸ·ʧȥIIS á

ʩ
Զʩ
ͬذװISAPI_Rewrite ʩĵһ Ҵʦָʾ װ򽫸ļ ҼCOM ISAPI ISAPI Զ ֹûҪʩ ȻһЩֹϲ ļϵͳûעIIS 籾ͼҲ衣

ֹʩ
ΨһISAPI_Rewrite ĳֵİ汾ֹ֧ʩ Ҫ طֹʩбļ ܰװ صΨһݵǡ 

СʩΨһ Ӧø ISAPI_Rewrite dll 鵵Ŀ͵Ǽ ͬISAPI ʹIIS MMC snap-in  ISAPI_Rewrite dll  Ǽ˻ȫԵػһվˮƽ()  跨װҪļ(httpd.ini) ӹDLL ҳļС վƽʵñװشվ

ұƼǼϢԴdll ṩı ISAPI_Rewrite ¼¼۲ߡ ɷṩ regmsg vbs 籾ӵļ RewriteMsg dll ҳ

ʹվ·䶯ļӵǼCOM  mtbnotif dll  regsvr32 mtbnotif dll.

ģҪWinHTTP 5 1 װڷ ѾǴ ڴڷ2003 , Windows XP SP1 Ӵ2000 SP3  װӴ2000 ĸڵİ汾Windows XP NT4 ܻ ʹԶʩغͰװ3 SDK  http://download ΢com/download/2/e/0/2.e068.a11-9ef7-45f5-820f-89573d7c4939/soapsdk exe. ڴڷ2003  Ӧðļ rwhelper dll  ڵͬļ rwhelper dll ҳ ҪװļOSes. , ڴ2003 Ӧô ʹһһָrwhelper dll һ̵ĵ·֡ ģñ ó Ĳ ֹ 

ǼISAPI_Rewrite ; ISRWConfig exe ҵ 

֪ľ޺
Lite 汾
Lite ISAPI_Rewrite ĳֵİ汾ͬд ԭʼ롣 Lite 汾֧ÿվ ص㡣 ΨһȫԹ򱻴 Lite 汾proxying 档 ·벻 ֧Lite 汾: RewriteProxy, EnableRewrite, DisableRewrite, EnableConfig, DisableConfig, CacheClockRate  Ӳ֧Lite 汾: P - ˡ

ISA 汾
ISAPI_Rewrite ΪISA 2004 ISAPI_Rewrite Lite 汾 I.e   һISA ѧLite 汾(  ֧ISAPI ӼҪΪֵİ汾ص㹤)  עȻгһ̨ISA ڷ 밲װISAPI_Rewrite ΪISA 2004 Ա 

رʼΪIIS6
ЩرʼйػϢ6 ص㡣0 (̶ 2003 ) ;ǿЩصISAPI_Rewrite Ĺܡ

IIS6 Ҫһ´ģͽWorker Process (WPI) ʽ ȻIIS6 ܾӪ(ûISAPI_Rewrite Ĺ) IIS5 Էʽ ҪôܴﵽֻWPI ʽ¡

WPI ʽվӦӦˮء  Ӧˮһ񱻸Ĺ߹w3wp exe  ߸뷽ʽ IIS5 һش inetinfo 档exe ١ 湤߹ΪͨӦá

ζ, Ψһ(һĶΪ߹)  ȻⲻһΪISAPI_Rewrite  , , Ӧ http://mysite/app1 http://mysite/app2 òͬӦˮر дURLs /app1 /app2 ֹӦ ͬվhttp://mysite  ֻķܰȫرʹ¡ Ȼ, ԼԺͨûжISAPI_Rewrite ÷κش վ°һΨһӦΨһ Ӧˮء 

˽

IIS5 ƺHTTPS Ӧӹ  HTTPS ķʧܡ ƹʹʽķ 
RFStyle 
ԡ 


ҪISAPI_Rewrite
Windows NT4 Ӵ2000 Windows XP ʹ2003 IIS5 ģʽ inetinfo exe ֮ ϵͳʻ ϵͳʻӦñٶISAPI_Rewrite dlls Ķȡ httpd ini ļ ǲƼϵͳ޸ļ httpd ini ļ ǽhttpd Ĵļ 鵵 ҲΪģ顣  ںϲ߱Ӧ÷ʽ, IIS ʻˮ ҸߵĸˮӦñrwhelper dll  ЩӦñ޸ϵͳʱļ(ͨ C:\Windows\Temp)  IWAM_<ComputerName> ʹΪˮء ˮʻܱ ڶӦCOM+ ӦCOM+ MMC snap-in  

ڴ2003 ڵIIS ʽ(WPI ʽ) ʹw3wp exe ߴӦ ӦˮӦá Ӧˮܱ ʹԼ֡ ܰñһֵ һȷIIS øӦǳԱ IIS_WPG С顣 , IIS_WPG Сܱʹ÷ ٶӦñISAPI_Rewrite dlls, rwhelper dll ֺhttpd ini ļ ˽ʹIIS_WPG Ӧñ޸ϵͳʱļ(ͨ C:\Windows\Temp)  ǲƼIIS_WPG ޸Ŀ¼httpd ini ļhttpd  鵵 

ģá
ʱģҲҪֹ(404 ʱ Ȼproxying ǰ)  ̳ ScriptMap metabase ǲƵ(ͨһ վֹ޸)  ¾籾ӳҪΪ ˹Ӧֹסڡ WSH 籾 cscript vbs  ISAPI_Rewrite ܱʹþסڴ˾籾ӳʩļ ͨmetabase   ó򲿷 Ϊ籾 ÷ϸڡ

ļʽ
жļ- ȫ () ҸԵ(վ㼶) ļ ȫ ļӦñ httpd ini Ӧó ISAPI_Rewrite ʩĿ¼ ļݾṩ ͨ𶯲˵ ԵļӦñ httpd ini ܳĿ¼ վ㡣 ļͬʽ Ǳ׼ĸʽ INI ļǲƵɲֵĵط ΨһĲ汾 ISAPI_Rewrite  [ ISAPI_Rewrite ]. з ֺÿӦña ֿߡ һı֮⽫ԡ

httpd ini ļ:

[ ISAPI_Rewrite ]

# 

# 300 = 5 
CacheClockRate 300
RepeatLimit 20

# httpd Ŀͨ롣ini httpd ļ
RewriteRule /httpd(?:\.ini| \ \ )/[ F i, o ]

# ԰ISAPI Ŀͨ
RewriteRule *\.isrwhlp/[ F i, o ]

# һЩ׹
RewriteCond : (.+)
RewriteRule (*) /$1$2 [ I]



ISAPI_Rewrite ļ ¼ļ httpd  ͬ ļѰҵĿ¼ ΨһԵľ䷨ܱ ڽڼ䡣 Ӿ䷨߼ֻܱڼ ͳʩС , ǲᱻɷhttpd ini  Ƽ һ¹ ʽԹ Ͷ֮ǰ ļ

RewriteCond 
䷨: RewriteCond TestVerb CondPattern [ ] 

RewriteCond 붨һ a ֮ǰ RewriteRule  RewriteHeader  RewriteProxy һ RewriteCond 롣 Ӱֻڹ (RewriteRule RewriteHeader RewriteProxy)  Чһ һֻƥԴ ƥǵĲԴ

TestVerb 
ָƥ䷴ʽĶʡ

TestVerb= (URL | | 汾| HTTPHeaderName: | %ServerVariable) :

URL - عURI ͻ RFC 2068 (HTTP 1 1); 
 - عͻHTTP (ѡ, õ, ͷλ, Ͷ, ɾӰ); 
汾 - عHTTP 汾; 
HTTPHeaderName - ָHTTP ˮĻعֵ HTTPHeaderName һϷHTTP ˮ֡ ˮ ð":". ָˮ Ǵڿͻ TestVerb Դ յĴ HTTPHeaderName = 
:
Charset:
:
:
Ȩ:
:
:
:
޸Դ:
:
ޱ:
Χ:
޶Դ:
ת:
Ȩ:
Χ:
Referer:
û:
κη׵ˮ:


ڹHTTP ˮǵļֵĸϢμRFC 2068 ꡣ

ServerVariable - ָķɱĻعֵ Ϊexamlpe, SERVER_PORT  ɱȫ IIS ס ױӦñǰ׺ % ־ עױǰС , ʹ %https  %HTTPS, , ܽЧ յļֵ

CondPattern 
ʽԱ TestVerb.

[ ] 
 һŶű:



O (nOrmalize) 
ڴ֮ǰ ȥ URL 롢Ƿַ, ȡ , URI IIS ȫȡѯʴ , Ӧ ʹѯʴҪġ Ҳõ URLs URL 뵹ˮ

ʼ: 
һʽڲ һΨһʽ:

(?:Condition1RegExp)\n(?:Condition2RegExp)\n ..\n(?:ruleRegExp)
ȻΨһʾƥ䷴ϵĵˮĴ ȱˮͿɱﱻΪյĴ ر ַ ^  $ ӦϵĴĽ (ͲǶ͵ˮĽ) ǵ÷һҲΪȫ벻ͬ ڴһ , ߶ȱƼ÷ ^  $ ־ ڹ 

RewriteRule 
䷨: RewriteRule ʽFormatString [ ] 

RewriteRule  дĸ ܷһΡ ÿ 붨һΨһдĹ  Щ Ҫ, Ϊʹõ ùִʱ䡣

ʽ 
ָƥURI ʽ  ʽ䷨ Ϊ Ϣ

FormatString 
ָURI ĸʽ  ʽ ䷨ ֶڸϢ

[ ] 
 һŶű: 

I (ignore ) 
, ַƥ䲻ܰ  Ӱ RewriteRule жӦ RewriteCond 롣

F (Forbidden) 
ֹͣдĹ̺403 a ıֹķӦ ͻ עFormatString õº öһnon-empty 

L (last ) 
ֹͣдĹͲҪд  ʹӷֹǰдURI  ¹һд

N (Next ) 
д޸ĹĿ¿ʼ һʼ(޸ı)   ٿʼɼֵƱָRepeatLimit 롣 ֱN Ӽ򵥵ؽԡ 

NS (Next  same ) 
N ӵ¿ʼͬ(i.e  ظ Ӧ)  ΨһRepeatLimit  һΨһظΪظȫ (i.e  ظΪһĵӶN  һظNS )  

P ( proxy) 
ǿȽURI ڲǣǿΪ (i.e , дֹ) ͨ ISAPI 졣  ϶, 洮ǺϷURI Э, ˵ȡ ˽˻ش

R (ȷ redirect) 
ǿȷͶԿͻֱӷӦָʾ, ṩURI Ϊһµص㡣 Ĺ 

RP (øķ) 
ͬһ[ R ] ӵ301 (õж) HTTP ״̬ 302 (ƶʱ) 

U (Unmangle ־) 
ɷURL ԭ˲ҲǵURL  д

O (nOrmalize) 
ڴ֮ǰ ȥ URL 롢Ƿַ, ȡ , URI IIS ȫȡѯʴ , Ӧ ʹѯʴҪġ õ URLs URL 뵹ˮ

CL (Case Lower) 
ıʽİ¡

CU (Case Upper) 
ıʽİЬ

RewriteHeader 
䷨: RewriteHeader HeaderName ʽFormatString [ ] 

RewriteHeader  Ǹһı RewriteRule  дͻURL , κ HTTP ˮ ʹд, ɾһHTTP ˮ, ͻı䶯

HeaderName 
ָдHTTP ˮ ܵļֵ ͬһΪ TestVerb  RewriteCond ԡ , RewriteRule ͬʶ RewriteHeader URL ʽʽ[ ]

ʽ 
ָƥ䷴ָĵˮʽ  ʽ䷨ Ϊ Ϣ

FormatString 
ָµˮֵĸʽ  ʽ ䷨ ֶڸϢ

[ ] 
 һŶű: 

I (ignore ) 
, ַƥ䲻ܰ  Ӱ RewriteHeader жӦ RewriteCond 롣

F (Forbidden) 
ֹͣдĹ̺403 a ıֹķӦ ͻ עFormatString õº öһnon-empty 

L (last ) 
ֹͣдĹͲҪд 

N (Next ) 
д޸ĹĿ¿ʼ һʼ(޸ı)   ٿʼɼֵƱָRepeatLimit 롣 ֱN Ӽ򵥵ؽԡ 

NS (Next  same ) 
N ӵ¿ʼͬ(i.e  ظ Ӧ)  ΨһRepeatLimit  һΨһظΪظȫ (i.e  ظΪһĵӶN  һظNS )  

R (ȷ redirect) 
ǿȷͶԿͻֱӷӦָʾ, ṩURI Ϊһµص㡣 Ĺ 

RP (øķ) 
ͬһ[ R ] ӵ301 (õж) HTTP ״̬ 302 (ƶʱ) 

U (Unmangle ־) 
ɷURL ԭ˲ҲǵURL  д

O (nOrmalize) 
ڴ֮ǰ ȥ URL 롢Ƿַ, ȡ , URI IIS ȫȡѯʴ , Ӧ ʹѯʴҪġ õ URLs URL 뵹ˮ

CL (Case Lower) 
ıʽİ¡

CU (Case Upper) 
ıʽİЬ

ȥˮ, ʽʽӦյĴ ӿͻȡûϢ:

RewriteHeader û: .* $0


Url ˮ, ṩUrl Ϊˮֵ:

RewriteCond URL (*)RewriteHeader Url: ^ $ $1


ӽָWebDAV /webdav asp 籾 ɸı󷽷:

RewriteCond ѡRewriteRule (*) /webdav asp?$1RewriteHeader ѡõ

RewriteProxy 
䷨: RewriteProxy ʽFormatString [ ] 

ǿȽURI ڲΪǣǿ (i.e , дֹ) ͨISAPI  Ǹѱ IIS Ϊϵͳ͸ վͷ 

ʽ 
ָƥURI ʽ  ʽ䷨ Ϊ Ϣ

FormatString 
ָURI ĸʽ  ʽ ䷨ ֶڸϢ ΪⷽFormatString ϷURL (Э顢, ȡ) ISAPI_Rewrite ģ齫˻ش

[ ] 
 һŶű: 

D (Delegate ȫ) 
ģ齫跨¼ңԶķ֤ ǰݵû ڹ̶IIS ֤ ⽫ԭʼû֤   ½ Ϊϸڡ

C (; Credentials) 
ģ齫跨¼һ̨ңԶķ֤ ָURL ֤ˮ  ʹhttp://user:password@host com/path/ ䷨Ϊ URLs   ½ Ϊϸڡ

F (Follow ķ) 
ISAPI_Rewrite 跨ӳָʾ(301, 302, ȷ) һ̨ңԶķ뵱طnamespace  ң ˻ظķָصĳ , ISAPI_Rewrite ޸ָʾָ Եط֡ ⽫ڲ(ڲ)  ִû

F ܱʹǿȴģڲ ָʾһ̨ңԶķء ; ҪܸķңԶķ  ʹӡ ܴһЩ Ӧá , WinForms ֤ÿͻڼ һķ ˽ָʾ򽫶ʧ ûδ֤ʵ 

I (ignore ) 
, ַƥ䲻ܰ  Ӱ RewriteProxy жӦ RewriteCond 롣

U (Unmangle ־) 
ɷURL ԭ˲ҲǵURL  д

O (nOrmalize) 
ڴ֮ǰ ȥ URL 롢Ƿַ, ȡ , URI IIS ȫȡѯʴ , Ӧ ʹѯʴҪġ õ URLs URL 뵹ˮ

H ( Host) 
ģ齫ʹõǰ˵ˮΪһ̨ңԶķ û һ̨ңԶķ˵ˮͿڰ 

A (Add ֤ˮ) 
֤ͨϢӴ˶һ̨ڲ ͻ֤Դϵͳʹá ģ齫ˮ X ISRW AUTH ,X ISRW AUTH û,X ISRW עû,X ISRW ңԶû

Ӧڷɱ AUTH_TYPE,AUTH_USER,LOGON_USER,REMOTE_USER

͵a proxied  

֤ƻΪˡ
IIS ѧʹģʵʩǿȷԼ ܱʹԴ˵֤ƻ õļƻ: 

-  - û֤ڿͻʹ֮a ֮ ˺һ̨ңԶķ ̨(˺ң) Ӧñ ֤ C ಻D ѡӦñָ 
-  - û֤ڿͻʹ֮䡣 һ̨ңԶķ Ҫ֤ ֿԴ: 
û֤ʵֱӵطһ̨ңԶķ ϵͳӦ Ϊ֤ ֻ. ֤ ʹ֤ܽʧܡ ңԶķӦ ֤ C ಻D ѡӦñָ 
û֤ʵһ̨ңԶķ ֤ʵ һ̨ңԶķȷ֤ ע֤Ӧ ȷָa proxied URL  C Ӧñָ, D ӲӦ ϡ 
- ڼ - û֤ʵһ̨ңԶķ ֤ʵһ̨ңԶķIIS ߹֤ IIS ߹ڴϵͳӦ֤ʹõʻ֮ Ϊ֤ ʻӦȡ ңԶķӦ ֤ C ӲӦñָ D Ӧñָң ڲ 
-  - û֤ʵԴϵͳҴϵͳ֤ʵ һ̨ңԶķû֤ ̨Ӧ֤ C Ӧñָ D ӲӦñָ 
- ڼ - û֤ʵԴϵͳҴϵͳ֤ʵ һ̨ңԶķû֤ ϵͳӦ֤ ңԶķӦ֤ C D Ӧñָ(C Ƽ)  
NTLM - NTLM - û֤ʵһִӦڷʹӦ ֤ʵӦ ͬ (ûзʽί NTLM ֤)  C ӲӦñָ D Ӧñָ 
Kerberos - Kerberos - û֤ʵԴϵͳʹϵͳ ֤ʵңԶķʹuser-supplied ֤ ʵʩҪ: 
ͻ, ϵͳProxied ӦͬԾĿ¼ εĹ(ҪʹݼƻΪӦá ȻŮʿ Kerberos  Kerberos ֤Ŀ ΪԱͻ, òҪΪƺҲ ΪӦ)  
ŽıӦˮΪӦ û(ܶ һ߹ʹһεʻ(IIS 6 0) ˽ⲽҪһʹ˰Ŀ)  ȻӦù MSDN , ޷Kerberos ڴ֮ a proxied ֡ һϰ, ҪSPNs Ϊ SPNs ñ KB Ůʿ 871179. 
ӦˮʻӦñ"Ϊ"  , طϵͳ ʻʹΪӦˮ, ϵͳӦñ"Ϊ"  ͬʱͻʻӦñ"жԴ"  ϸϢʻܱ ô: ʵʩKerberos ΪӴ2000. 
ʴϵͳ, NetBIOS ͹ͬ, ǼSPN ΪǸ֡ ܶôSPNs  ô: Kerberos صIIS 
C ӲӦñָISAPI_Rewrite  D Ӧñָ 
õ, ,  ô: Kerberos صIIS ֧ϵ֮ǰ 
NTLM - Kerberos - û֤ʵһϵͳNTLM ֤ Ҵϵͳ֤ʵңԶķKerberos  ݼƻ Ҫһ Kerberos - Kerberos ƻ , һͻ ʤνNTLM ֤ڲͨˡ ݼƻ ܱʵʩֻڹڴ2003 طʽ¡ ӦˮʻӦñ֤Ĵ Эhttp proxied  

CacheClockRate 
䷨: CacheClockRate ʱ 

ֻܳȫġ  Եվ㼶ĲҴϢ httpd дļ

ISAPI_Rewrite װصÿļڵһΡ ʹָվ㲻õڼ ʱýϴ  㹻ǿISAPI_Rewrite δ ס καļ֮ ¸󲻹ʱ䡣

ʱ 
ָõʱ(ڼ)  ϴ ȱʡֵ3600 (1 Сʱ) 

EnableConfig DisableConfig 
䷨:
EnableConfig [SiteID|"Site "]
DisableConfig [SiteID|"Site "] 

ʹܻʹվ㼶ʧȥΪһѡվı ȱʡ ȱʡվ㼶ʹܡ  ֻܳȫġ վ㼶 ԲҴϢhttpd д ļ

SiteID 
վmetabase ʶ

վ 
վͬIIS ̨

ʹûвⷽתȱʡʹ/ʹ ô

:

־ʹֻΪվID=1 (͵ ȱʡվ) վ"ҵվ":

DisableConfig
EnableConfig 1
EnableConfig "ҵվ"


ʹΪվ㱻"һЩ վ"Ϊȷúȱʡá

EnableConfig "ĳһվ"
DisableConfig


EnableRewrite DisableRewrite  
䷨:
EnableRewrite [SiteID|"Site "]
DisableRewrite [SiteID|"Site "] 

ʹܻʹдΪһѡվʧȥıȱʡ дʹܡ ֻܳȫ ġ վ㼶 ҴϢhttpd дļ

SiteID 
վmetabase ʶ

վ 
վͬIIS ̨

ʹûвⷽʹܻʹдʧȥ 
RepeatLimit 
䷨: RepeatLimit  

ܳȫԺվ㼶 ļ ȫļı ȫԼΪء 뽫վ㼶 ļıһΪվΨһ ܳȫԼޡ 

ISAPI_Rewrite Ȧ(μ RewriteRule RewriteHeader N )   ׼ƿܵȦ֡ ܵ һʹʹɻʧȥ

 
ָȦһ֡ ȱʡֵ32 