![rewritet线结局 RewriteCond](http://img.aihuau.com/images/b/01130503/1313030501135195390844.jpg)
RewriteCond指令格式
语法: RewriteCond TestString CondPattern [flags]
RewriteCond指令定义一条规则条件。在一条Rewriterule指令前面可能会有一条或多条RewriteCond指令,只有当自身的
模板(pattern)匹配成功且这些条件也满足时规则才被应用于当前URL处理。
1、 TestString是一个纯文本的字符串,除了包含普通的字符外,还可以包括下列的可扩展结构:
1)$N:RewriteRule后向引用,其中(0 <= N <= 9) 。$N引用紧跟在RewriteCond后面的RewriteRule中模板中的括号中的
模板在当前URL中匹配的数据。
2)%N:RewriteCond后向引用,其中(0 <= N <= 9) 。%N引用最后一个RewriteCond的模板中的括号中的模板在当前URL中
匹配的数据。
3)${mapname:key|default}:RewriteMap扩展。
2、CondPattern是条件pattern, 即一个应用于当前实例TestString的正则表达式, 即TestString将会被计算然后与
CondPattern匹配。作为一个标准的扩展正则式,CondPattern有以下补充:
1)可以在模板串前增加一个!前缀,以用表示不匹配模板。但并不是所有的test都可以加!前缀。
2)CondPattern中可以使用以下特殊变量:
'
'>CondPattern’ (大于) 将condPattern当做一个普通字符串,将它和TestString进行比较,当TestString 的字符大于
CondPattern为真。
‘=CondPattern’ (等于) 将condPattern当做一个普通字符串,将它和TestString进行比较,当TestString 与
CondPattern完全相同时为真.如果CondPattern只是 “” (两个引号紧挨在一起) 此时需TestString 为空字符串方为真
。
‘-d’ (是否为目录) 将testString当做一个目录名,检查它是否存在以及是否是一个目录。
‘-f’ (是否是regular file) 将testString当做一个文件名,检查它是否存在以及是否是一个regular文件。
‘-s’ (是否为长度不为0的regular文件) 将testString当做一个文件名,检查它是否存在以及是否是一个长度大于0的
regular文件。
‘-l’ (是否为symboliclink) 将testString当作一个文件名,检查它是否存在以及是否是一个 symbolic link。
‘-F’ (通过subrequest来检查某文件是否可访问) 检查TestString是否是一个合法的文件,而且通过服务器范围内的当
前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性
能。
‘-U’ (通过subrequest来检查某个URL是否存在) 检查TestString是否是一个合法的URL,而且通过服务器范围内的当前
设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能
。
3、[flags]是第三个参数,多个标志之间用逗号分隔。
1)’nocase|NC’ (不区分大小写) 在扩展后的TestString和CondPattern中,比较时不区分文本的大小写。注意,
这个标志对文件系统和subrequest检查没有影响.
2)’ornext|OR’ (建立与下一个条件的或的关系) 默认的情况下,二个条件之间是AND的关系,用这个标志将关系
改为OR。例如: RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR]
RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule … 如果没有[OR]标志,需要写三个条件/规则.