首页 > 服务器学习 > Linux > Apache中RewriteCond规则参数介绍
2016
12-17

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)。

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。