Apache中RewriteCond规则参数介绍
RewriteCond指令定义了规则生效的条件,即在一个RewriteRule指令之前可以有一个或多个RewriteCond指令。 条件之后的重写规则仅在当前URI与Pattern匹配并且满足此处的条件(TestString能够与CondPattern匹配)时才会起作用。就像我们程序中的if语句一样
【语法】RewriteCond TestString CondPattern [flags]
TestString是一个纯文本的字符串,但是还可以包含下列可扩展的成分:
1、RewriteRule反向引用,引用方法是:$N,引用当前(带有若干RewriteRule指令的)RewriteCond中的与Pattern匹配的分组成分(圆括号!)。
2、RewriteCond反向引用 ,引用方法是:%N,引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!)。
3、RewriteMap扩展 ,引用方法是:${mapname:key|default} 细节请参见RewriteMap指令 。
4、服务器变量 ,引用方法是:%{NAME_OF_VARIABLE} NAME_OF_VARIABLE可以是下表列出的字符串之一:
HTTP头连接与请求
HTTP_USER_AGENT:浏览器的用户代理,包含客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等
HTTP_REFERER:来源页面
HTTP_COOKIE:cookie值
HTTP_FORWARDED:客户端IP地址,有可能获取不到或获取不到真是客户端IP
HTTP_HOST:主机头,如果端口不是默认的80,会显示端口号。
HTTP_PROXY_CONNECTION:HTTP头中的表示客户端与服务连接类型
HTTP_ACCEPT:HTTP头中浏览器支持的 MIME 类型分别
REMOTE_ADDR:最后一个代理服务器 IP,真实性比HTTP_FORWARDED低
REMOTE_HOST:发出请求的客户机的完整的域名。如果不能确定该域名,则返回IP地址。
REMOTE_PORT:用户连接到服务器时所使用的端口号
REMOTE_USER:经验证的用户
REMOTE_IDENT
REQUEST_METHOD:表示的是表单提交数据的方式,get或者post
SCRIPT_FILENAME:文件的硬盘路径
PATH_INFO:访问页面的域名后面的路径,不包含?号后面的
QUERY_STRING:?号后面的查询字符串
AUTH_TYPE
服务器自身 日期和时间 其它
DOCUMENT_ROOT:获取当前运行脚本所在的文档根目录,是由服务器配置文件中定义
SERVER_ADMIN:显示服务器管理员的相关信息。
SERVER_NAME:主机头,如果端口不是默认的80,也不会显示。
SERVER_ADDR:当前运行脚本所在的服务器的 IP 地址
SERVER_PORT:服务器端口号
SERVER_PROTOCOL:http协议
SERVER_SOFTWARE:服务器标识字符串,在响应请求时的头信息中给出,包含服务器的服务版本号等
TIME_YEAR:
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME:
API_VERSION:这是正在使用中的Apache模块API(服务器和模块之间内部接口)的版本, 其定义位于include/ap_mmn.h中。此模块API版本对应于正在使用的Apache的版本(比如在Apache 1.3.14的发行版中这个值是19990320:10)。 通常,对它感兴趣的是模块的开发者。
THE_REQUEST:这是由浏览器发送的完整的HTTP请求行(比如:”GET /index.html HTTP/1.1″)。它不包含任何浏览器发送的其它头信息。
REQUEST_URI:在HTTP请求行中所请求的资源。访问页面的域名后面的路径,包含?号后面的字符串
REQUEST_FILENAME:这是与请求相匹配的完整的本地文件系统的文件路径名,-f文件,-d目录,-s非空的常规文件,-l符号连接文件(linux中的软连接),-x拥有可执行权限的文件,
IS_SUBREQ:如果正在处理的请求是一个子请求,它将包含字符串”true”,否则就是”false”
HTTPS:如果连接使用了SSL/TLS,它将包含字符串”on”,否则就是”off”(无论mod_ssl是否已经加载,该变量都可以安全的使用)。
最后一个参数flags:
NC:忽略大小写
OR:或下一条件
RewriteCond语句之间默认的是AND,如果想要OR,则要明确的写出来。就是说一个RewriteRule语句前如果有多个RewriteCond语句时,必须所有的RewriteCond都同时满足才会执行这个RewriteRule语句,如果想这些RewriteCond语句是OR的关系,那么需要在flags处写明(即在flags处填写OR)。