ISAPI Rewrite 非官方中文配置手冊_藍色版本第1/3頁
2024-09-01 13:46:57
供稿:網友
發這個幫助文件是因為在給朋友設置主機的時候發現他們的ISAPI Rewrite的設置都有些不正確,有些甚至阻礙了站點的正常運行。就把官方自帶的英文幫助粗略的翻譯了一下。大家可以自由使用和轉載。但轉載時如果你愿意請注明是 藍色 翻譯的版本。
===================
ISAPI Rewrite 配置簡介:
在NT/2000/XP和2003平臺上,ISAPI Rewrite在系統帳戶下射入INETINFO進程與 IIS 以共存模式過濾器運行。所以系統帳戶應該給予對ISAPI- REWIRITE DLLS Internet匿名訪問組 可讀可執行權限 和所有的 HTTPD。INI 文件可讀權限,還應該給予系統帳戶對于所有包括 HTTPD。INI 文件的文件夾的可寫權限,這將允許產生 HTTP。 PARSE。ERRORS 日志文件,來記錄配置文件語法錯誤。對于PROXY模塊也需要額外的權限,因為它將運行于連接池或HIGH-ISPLATED 應用模式,IIS帳戶共享池和HIGH-ISOLATION池應被給予對RWHELPERE。DLL的可讀權限。缺省情況下IWAM-《計算機名》被用于所有的池,在相應的COM+應用設置中應借助COM+ADMINISTRATION MMC SNAP-IN建立池帳戶
配置文件格式化:
配置文件分為兩種: GLOBAL(服務器全局模式)和 INDIVIDUAL(站點獨立設置模式)文件,GLOBAL(服務器端全局模式)配置文件應該被放在ISAPI-REWRITE 安裝目錄中,名為 httpd.ini 。這個文件可以通過開始菜單的快捷方式訪問和配置,這個文件里面的映射規則為全局規則,將針對所有站點起效。INDIVIDUAL(站點獨立設置模式)配置文件應該被放在虛擬站點的根目錄內,也被命名為httpd.ini文件,這里面應該放置針對站點的映射配置設置,只針對被放置的虛擬站點有效。兩種類型的 httpd.ini 都是標準的windows ini 文件。所有的映射規則應該被放置在 [ISAPI_Rewrite] 之后。之前的文件文本將被忽略。
HTTPD.INI文件示例
[ISAPI_Rewrite]
# This is a comment
# 300 = 5 minutes
CacheClockRate 300
RepeatLimit 20
# 設置其他人沒有下載 httpd.ini 和 httpd.parse.errors 文件的權限
RewriteRule /httpd(?:/.ini|/.parse/.errors) / [F,I,O]
# Block external access to the Helper ISAPI Extension
RewriteRule .*/.isrwhlp / [F,I,O]
# 配置規則
RewriteCond Host: (.+)
RewriteCond 指令
Syntax:(句法) RewriteCond TestVerb CondPattern [Flags]
這一指令定義一個條件規則,在 RewriteRule 或者 RewriteHeader或 RewriteProxy指令前預行RewriteCond指令,后面的規則只有它的,模式匹配URI的當前狀態并且額外的條件也被應用才會被應用。
TestVerb
Specifies verb that will be matched against regular expression.
特別定義的動詞匹配規定的表達式
TestVerb=(URL | METHOD | VERSION | HTTPHeaderName: | %ServerVariable) where:
URL - returns Request-URI of client request as described in RFC 2068 (HTTP 1.1);
返回客戶端在RFC2068中描述的需求的Request-URI
METHOD - returns HTTP method of client request (OPTIONS, GET, HEAD, POST, PUT, DELETE or TRACE);
返回客戶端需求(OPTIONS, GET, HEAD, POST, PUT, DELETE or TRACE)的HTTP方法
VERSION - returns HTTP version;
返回HTTP版本
HTTPHeaderName - returns value of the specified HTTP header. HTTPHeaderName can be any valid HTTP header name. Header names should include the trailing colon ":". If specified header does not exists in a client's request TestVerb is treated as empty string.
返回特定義的HTTP頭文件的值
HTTPHeaderName =
Accept:
Accept-Charset:
Accept-Encoding:
Accept-Language:
Authorization:
Cookie:
From:
Host:
If-Modified-Since:
If-Match:
If-None-Match:
If-Range:
If-Unmodified-Since:
Max-Forwards:
Proxy-Authorization:
Range:
Referer:
User-Agent:
Any-Custom-Header
得到更多的關于HTTP頭文件的和他們的值的信息參考RFC2068
ServerVariable 返回特定義的服務器變量的值 。例如服務器端口,全部服務器變量列表應在IIS文檔中建立,變量名應用%符預定;
CondPattern
The regular expression to match TestVerb
規則表達式匹配TestVerb
[Flags]
Flags is a comma-separated list of the following flags:
O (nOrmalize)
Normalizes string before processing. Normalization includes removing of an URL-encoding, illegal characters, etc. This flag is useful with URLs and URL-encoded headers
RewriteRule 指令
Syntax: RewriteRule Pattern FormatString [Flags]
這個指令可以不止發生一次,每個指令定義一個單獨的重寫規則,這些規則的定義命令很重要,因為這個命令在應用運行時規則是有用途的
I (ignore case)
不管大小寫強行指定字符匹配,這個FLAG影響RewriteRule指令和相應的RewriteCond 指令
F (Forbidden)
對客戶端做反應,停止REWRITING進程并且發送403錯誤,注意在這種情況下FORMATSTRING 是無用的并可以設置為任何非空字符串。
L (last rule)
不應用任何重寫規則在此停止重寫進程,使用這個FLAG以阻止當前被重寫的URI被后面的規則再次重寫
N (Next iteration)
強制REWRITINGENGINE調整規則目標并且從頭重啟規則檢查(所有修改將保存),重啟次數由RepeatLimit指定的值限制,如果這個數值超過N FLAG將被忽略
NS (Next iteration of the same rule)
以N標記工作不從相同的規則重啟規則規則進程(例如強制重復規則應用),通過RepeatLimit指令指定一個反復實行某一規則的最大數目,
P (force proxy)
強制目的URI在內部強制為代理需求并且立即通過ISAPI擴展應付代理需求,必須確認代理字符串是一個有效的URI包括協議主機等等否則代理將返回錯誤
R (explicit redirect)
強制服務器對客戶端發出重定向指示即時應答,提供目的URI的新地址,重定向規則經常是最后規則
RP (permanent redirect)
幾乎和[R]標記相同但是發布301HTTP狀態而不是302HTTP狀態代碼
U (Unmangle Log)
當URI是源需求而不是重寫需求時記載URI
O (nOrmalize)
在實行之前標準化字符串。標準化包括URL-ENCODING,不合法的字符的再移動等,這個標記對于URLS和URLS-ENDODED頭是有用的
CL (Case Lower)
小寫
CU (Case Upper)
大寫
RewriteHeader directive
Syntax: RewriteHeader HeaderName Pattern FormatString [Flags]
這個指令是RewriteRule的更概括化變種,它不僅重寫URL的客戶端需求部分,而且重寫HTTP頭,這個指令不僅用于重寫。生成,刪除任何HTTP頭,甚至改變客戶端請求的方法
HeaderName
指定將被重寫的客戶頭,可取的值與 RewriteCond 指令中TestVerb參數相同
Pattern
限定規則表達式以匹配Request-URI,
FormatString
限定將生成新的URI的FormatString
[Flags]
是一個下列FLAGS的命令分隔列表
I (ignore case)
不管大小寫強行指定字符匹配,這個FLAG影響RewriteRule指令和相應的RewriteCond 指令
F (Forbidden)
對客戶端做反應,停止REWRITING進程并且發送403錯誤,注意在這種情況下FORMATSTRING 是無用的并可以設置為任何非空字符串。
L (last rule)
不應用任何重寫規則在此停止重寫進程,使用這個FLAG以阻止當前被重寫的URI被后面的規則再次重寫
N (Next iteration)
強制REWRITINGENGINE調整規則目標并且從頭重啟規則檢查(所有修改將保存),重啟次數由RepeatLimit指定的值限制,如果這個數值超過N FLAG將被忽略
NS (Next iteration of the same rule)
以N標記工作不從相同的規則重啟規則規則進程(例如強制重復規則應用),通過RepeatLimit指令指定一個反復實行某一規則的最大數目,
R (explicit redirect)
強制服務器對客戶端發出重定向指示即時應答,提供目的URI的新地址,重定向規則經常是最后規則
RP (permanent redirect)
幾乎和[R]標記相同但是發布301HTTP狀態而不是302HTTP狀態代碼
U (Unmangle Log)
當URI是源需求而不是重寫需求時記載URI
O (nOrmalize)
在實行之前標準化字符串。標準化包括URL-ENCODING,不合法的字符的再移動等,這個標記對于URLS和URLS-ENDODED頭是有用的
CL (Case Lower)
小寫
CU (Case Upper)
大寫
要重移動頭,FORMAT STRING模式應該生成一個空字符串,例如這一規則將從客戶請求中重移代理信息
RewriteHeader User-Agent: .* $0
并且這一規則將把OLD-URL HEADER 加入請求中。
RewriteCond URL (.*)RewriteHeader Old-URL: ^$ $1
最后一個例子將通過改變請求方法定向所有的WEBDAV請求到/WEBDAV。ASP
RewriteCond METHOD OPTIONS
RewriteRule (.*) /webdav.asp?$1
RewriteHeader METHOD OPTIONS GET
RewriteProxy directive
Syntax: RewriteProxy Pattern FormatString [Flags]
強制目的URI在內部強制為代理需求并且立即通過ISAPI擴展應付代理需求,這將允許IIS作為代理服務器并且重路由到其他站點和服務器
Pattern
限定規則表達式以匹配Request-URI,
FormatString
限定將生成新的URI的FormatString
[Flags]
是一個下列FLAGS的命令分隔列表
D (Delegate security)
代理模式將試圖以當前假冒的用戶資格登陸遠程服務器,
C (use Credentials)
代理模式將試圖一在URL或基本授權頭文件中指定的資格登陸遠程服務器,用這個標記你可以使用:password@host.com/path/ syntax 作為URL
F (Follow redirects)
缺省情況下ISAPI_Rewrite 將試圖將MAP遠程服務器返回的重定向指令到本地服務器命名空間,如果遠程服務器返回重定向點到那臺服務器其他的某個位置,ISAPI_Rewrite 將修改這一重定向指令指向本服務器名,這將避免用戶看到真實(內部)服務器名稱
使用F標記強制代理模式內部跟蹤遠程服務器返回的重定向指令,使用這個標記如果你根本不需要接受遠程服務器的重定向指令,在WINHTTP設置中有重定向限制以避免遠程重定向循環