分类分类
关注+2011-01-07作者:清晨
4.4RewriteRule指令
说明 | 定义URL重写规则 |
语法 | RewriteRule Pattern Substitution [flags] |
使用环境 | server config, virtual host, directory, .htaccess |
这个指令定义了单个URL重写操作。它可能在一个配置文件中出现多次,每个实例定义一个重写URL的规则。RewriteRule指令包含URL匹配模式、替换字符串以及可选的标志设置。
Pattern(模式)是一个用来匹配当前URL的Perl兼容正则表达式。当前的URL可以是原来请求的URL或者已经由优先级高的规则替改过的URL。网址从不包含协议或者主机名,从第一个斜杠字符开始(只对httpd.conf文件适用)。而且当前网址还因不同的应用配置级别而异。对于目录级配置(.htaccess文件),结尾的斜线和配置文件的目录名,会在匹配时被从URL中忽略掉。在创建正则表达式时,请阅读这个文档的正则表达式语法部分来得到更多的信息。
"!"字符打头的模式将否定整个表达式。否定模式不能产生子匹配,所以你不能使用$N的替代引用。
Substitution(替换)字符串指定了模式是匹配时生成URL的格式字符串。除了纯文本,它可以包括这些特殊字符。
• 对Rewrite模式的回溯引用 $N
• 对Rewrite模式的回溯引用 %N
• 服务器变量 %{VARNAME}
• 条件格式模式 ?Ntrue_string:false_string
• 分组括号“(”和“)”
替换字符串将所有的字符视为字面值,除了$'、'\'、'('、')','?',':'和'\'。为了字面化地读出特殊字符,它定义了用"\"引导的转义字符。下面的特殊字符是允许的。
$& | 输出匹配的整个表达式。 |
$` | 输出上一个的匹配结束到当前匹配的开始之间的文本(如果之前没有找到匹配串,则输出从开头到当前匹配的开始之间的文本)。 |
$' | 输出当前匹配之后跟着的所有文字。 |
$$ | 输出字面值$ |
\a | 信号铃字符 |
\f | 表单反馈字符 |
\n | 新行字符 |
\r | 回车符 |
\t | 制表符 |
\v | 垂直制表符 |
\x | 十六进制字符,比如说\x0D. |
\x{} | 一个可能的Unicode十六进制字符-例如\x{1A0} |
\cx | ASCII的转义字符x,例如\c @等价于escape-@。 |
\e | The ASCII 转义字符 |
\dd | 八进制字符常量,例如\10。 |
\l | 导致下一个字符被小写输出。 |
\u | 导致下一个字符被大写输出。 |
\L | 导致整个后继字符串被小写输出,直到遇到\E。 |
\U | 导致整个后继字符串被大写输出,直到遇到\E。 |
\E | 结束\L或者\U的后续字符串 |
\\ | 单个反斜杠字符'\' |
RewriteRule从父配置文件开始按照在配置文件中出现的次序应用。每个规则只有在它的Pattern匹配了一个URL而且所有连接条件(RewriteCond)都匹配时才会被应用。在该URL用Substitution完成替换之后,重写过程还在继续,一直到配置文件结束或者遇到一个用了任何停止标志的规则。在Substitution中的特殊字符串"-"(短横)意味着没有替换,而且当你需要应用该规则并留下的原始的未被染指过的URL时它是很有用的。
此外,这里有一个支持的flag(标志)列表。这些标识可以改变规则的表现。与Apache完全兼容的标志被标记为绿色,不支持的标志被标记为绿色,只在 ISAPI_Rewrite中被支持的标识被标记成黄色。
CU (Case Upper)
把替换字符串改成大写.
CL (Case Lower)
把替换字符串改成小写.
chain|C
将当前规则与后一条规则链接起来,后一条规则只有在当前规则被匹配的情况下才能被执行。链接可以再后续链接。
cookie|CO=NAME:VAL:domain[:lifetime[:path]]
设置一个有指定字段的cookies头,并把它和当前请求的响应一起发送到客户端。
env|E=VAR:VAL
不支持,在UNIX环境中设置一个环境变量,在Windows系统中无意义。
forbidden|F
发送即时403 FORBIDDEN响应到客户端,停止这个请求的规则处理以及所有其他的替换处理。
gone|G
发送一个即时401Gone响应到客户端,停止这个请求的规则处理以及所有其他的替换过程。
handler|H=Content-handler
不支持,为请求明确指定了处理处理。在IIS的世界中这是可以通过重写请求的文件扩展名来实现。但是没有从Apache处理到IIS文件扩展名的直接转换方法。
last|L
停止这里的重写处理,不再应用当前配置文件中的其它规则。在这种情况下,后代的.htaccess文件依然能被用到。
loop|LP
在一个循环中重复运行当前单个规则直到它的模式以及条件不再被匹配了。循环次数被限定为200免得陷入无限循环。
next|N
从当前配置文件开始处重复运行重写处理。循环次数被限定为200免得陷入无限循环。
nocase|NC
这个标记使Pattern大小写不敏感。
noescape|NE
不转义输出。在ISAPI_Rewrite默认情况下,在输出中会把所有的非ANSI字符编码为十六进制数%xx。
nosubreq|NS
这个标识在ISAPI_Rewrite中与在Apache中含义不同。精确的转换是不可能的,但这个标志可能仍然是有用的。每当配置文件处理完成之后,URL被重写了,ISAPI_Rewrite将启动这个新的URL处理过程(与Apache相同)使它可以应用到另一个配置文件中。此标识意思是该规则只针对初始用户的请求执行,不针对已被重写过的请求执行,以防可能出现的循环。ISAPI_Rewrite限定循环重复次数为10。
nounicode|NU
如果设置了NU标记,从Unicode转换为UTF - 8将不会发生。所有Unicode字符会保持它的%xx格式不变。
O (nOrmalize)
留着用于与ISAPI_Rewrite 2.x兼容。如果使用了RewriteCompatibility2,这个指令在处理之前将URL规范化。规范化包括移除一个URL编码、错误字符,等等。同时URL的规范化将完全移除它的查询字符串。如果RewriteCompatibility2 没有被使用,URL按照默认被规范化(就如同它在mod_rewrite中所做的),此标志的含义将反转。
proxy|P
将结果URL强制内部处理为另一台服务器上的目标,并即时传到远程服务器上,并且,规则处理在这里中断了。远程服务器的响应将被传递回客户端。proxy需要您指定完整的URL,由协议、主机名称等开头。ISAPI_Rewrite使用ISAPI扩展来处理代理请求。你可以在代理配置章节中阅读到更多有关于此的内 容。
passthrough|PT
不支持或者始终支持。在IIS中结果始终传递到下一个处理
qsappend|QSA
追加当前查找串的数据到替换串而不是由一个替换字符串取代它。当你需要在保留原来的参数再添加更多的查询字符串参数时,可以使用它。
redirect|R [=code]
强制服务器用重定向指令给客户端发送一个即时响应,提供一个新的接替位置。可以选加前缀http://thishost[:thissport]/从而把URL带到一个可用的绝对形式。如果没有给出代码,将使用一个302响应(暂时性移动)。你可以选择在3XX系列范围内指定任何代码。
skip|S=num
如果当前的规则匹配,强制rewrite引擎跳过后面num个规则。
type|T=MIME-type
强制目标文件的MIME类型转换成被设定的MIME类型。这能够被用来根据一些条件设置内容类型。
U (Unmangle log)
无损记录。记录它原来请求的网址,而不是被重写的URL。
相关文章
更多+相同厂商
热门推荐
点击查看更多
点击查看更多
点击查看更多
说两句网友评论