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) 大写
RewriteRule /robots\.txt /robots.asp Making search engines to index dynamic pages 站点的内容存储在XML文件中,在服务器上有一个/XMLProcess.asp 文件处理XML文件并返回HTML到最终用户,URLS到文档有如下形式 http://www.mysite.com/XMLProcess.asp?xml=/somdir/somedoc.xml 但是许多公共引擎不能索引此类文档,因为URLS包含问号(文档动态生成), ISAPI_Rewrite可以完全消除这个问题 [ISAPI_Rewrite]
RewriteRule /doc(.*)\.htm /XMLProcess.asp\?xml=$1.xml 现在使用如同http://www.mysite.com/doc/somedir/somedoc.htm的URL进入文档,搜索引擎将不知道不是somedoc.htm 文件并且内容是动态生成的 Negative expressions (NOT 有时当模式不匹配你需要应用规则,这种情况下你可以使用在规则表达式中称为Forward Lookahead Asserts 例如你需要不使用IE把所有用户移动到别的地点 [ISAPI_Rewrite] # Redirect all non Internet Explorer users # to another location RewriteCond User-Agent: (?!.*MSIE).* RewriteRule (.*) /nonie$1 Dynamic authentification 例如我们在站点上有一些成员域,我们在这个域上需要密码保护文件而我们不喜欢用BUILT-IN服务器安全,这个情况下可以建立一个ASP脚本(称为proxy.asp),这个脚本将代理所有请求到成员域并且检查请求允许,这里有一个简单的模板你可以放进你自己的授权代码
现在我们要通过配置 ISAPI_Rewrite 通过这个页面代理请求:
[ISAPI_Rewrite] # Proxy all requests through proxy.asp RewriteRule /members(.+) /proxy.asp\?http\://mysite.com/members$1 Blocking inline-images (stop hot linking