全部博文(317)
分类: LINUX
2014-03-27 16:43:31
Apache重写模块即mod_rewrite模块应用非常广泛,在处理url重写规则中发挥了重要作用。如果使用基于目录级的 (.htaccess)重写规则,要注意一点那就是必须打开此目录的FollowSymLinks(决定是否可以通过符号连接跨越DocumentRoot)属性且在.htaccess里要声明RewriteEngine on。
RewriteCond规则参数
该指令定义了规则生效的条件。在一个RewriteRule指令之前可以有一个或多个RewriteCond指令。
RewriteCond TestString CondPattern [flags]
1、TestString是一个纯文本的字符串,还可以是以下几个值:
》RewriteRule反向引用;
》RewriteCond反向引用;
》RewriteMap扩展;
》服务器变量。
2、CondPattern是一个正则表达式。
》可以在CondPattern串的开头使用'!'(惊叹号)来指定不匹配;
》CondPatterns有若干特殊的变种。除了正则表达式的标准用法,还有下列用法:
3、flags是一个以逗号分隔的以下标记的列表:
》‘nocase|NC’:忽略大小写;
》‘ornext|OR’:或下一条件。它以OR方式组合若干规则的条件,而不是隐含的AND。
RewriteRule规则参数
RewriteRule指令是重写引擎的根本,此指定可以多次定义,每个指定定义一个简单的重写规则,按顺序依次执行生效。RewriteRule的语法规则如下:
RewriteRule Pattern Substitution [flags]
1、Pattern是一个正则表达式;
2、Substitution是替换字符串,该字符串可以是如下值:
》对Pattern反向应用($N);
》对最后匹配的RewriteCond的反向引用(%1);
》规则中的服务器变量;
》映射函数调用(${mapname:key|default});
3、Flags是一个以逗号分隔的下列标记的列表:
》‘chain|C’:链接下一规则。如果一个规则被匹配,则继续处理后续规则,否则,跳过后续规则;
》‘env|E=VAR:VAL’:设置环境变量。VAL可以包含正则表达式的反向引用($N和%N)。这个标记可以被多次使用从而用来设置多个环境变量;
》‘forbidden|F’:强制禁止当前URL,反馈403响应码;
》‘gone|G’:强制当前URL为已废弃;
》‘handler|H=Content-handler’:强制指定内容处理器;
》‘last|L’:立即停止重写操作,并不再应用其它重写规则。相当于程序中的break命令。这个规则用来阻止当前规则被后续规则再次重写;
》‘next|N’:重新执行重写操作,从第一个规则重新开始。此时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理过的URL;
》‘nocase|NC’:忽略大小写;
》‘noescape|NE’:在输出中不对URI进行转义。阻止mod_rewrite对重写结果应用常规的URI转义规则;
》‘nosubreq|NS’:不对内部子请求进行处理;
》‘proxy|P’:强制为代理;
》‘passthrough|PT’:移交给下一个处理器。使得RewriteRule指令的输出能够被(从URI转换到文件名的)Alias, ScriptAlias, Redirect等指令进行后续处理;
》‘qsappend|QSA’:追加查询字符串。此标记强制重写引擎在已有的替换字符串中追加一个查询字符串,而不是简单的替换;
》‘redirect|R [=code]’:强制重定向。默认响应码是302。如果你希望停止重写操作而立即重定向,那么就还需要使用'L'标记;
》‘skip|S=num’:跳过后继规则。跳过当前匹配规则之后的num个规则。
》‘type|T=MIME-type’:强制MIME类型,可以用来基于某些特定条件强制设置内容类型。