RewriteCond规则及参数详解

语法:RewriteCond TestString CondPattern [flags]

一个或多个RewriteCond指令可用于限制将受其下RewriteRule约束的请求类型。RewriteCond同样有3个由空格分割开的参数组成,它们分别是:

TestString:描述请求特征的变量。

CondPattern:CondPattern是一个兼容perl的正则表达式,但是还有若干补充,TestString将会被计算然后与CondPattern匹配。可以在pattern串中使用“!”(惊叹号)来实现匹配的反转。

[flags]:可选参数,修改匹配进行评估的标志列表。

TestString参数详解

TestString是一个纯文本的字符串,但是还可以包含下列可扩展的成分。

RewriteRule反向引用:引用方法是 $N (0 <= N <= 9) 引用当前(带有若干RewriteCond指令的)RewriteRule中的 与pattern匹配的分组成分(圆括号!)。

RewriteCond反向引用:引用方法是 %N (1 <= N <= 9) 引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!)。

RewriteMap 扩展:引用方法是 ${mapname:key|default}

服务器变量:引用方法是 %{ NAME_OF_VARIABLE } 这个是我们最常使用到的功能,常用的NAME_OF_VARIABLE值有:

IS_SUBREQ

如果正在处理的请求是一个子请求,它包含字符串”true”,否则就是”false”。 模块为了解析URI中的附加文件,有可能会产生子请求。

API_VERSION

这是正在使用的httpd中(服务器和模块之间内部接口)的Apache模块API的版本, 其定义位于include/ap_mmn.h中。此模块版本对应于正在使用的Apache的版本 (比如,在Apache 1.3.14的发行版中,这个值是19990320:10)。 通常,对它感兴趣的是模块的作者。

THE_REQUEST

这是由浏览器发送给服务器的完整的HTTP请求行。(比如, “GET /index.html HTTP/1.1″). 它不包含任何浏览器发送的附加头信息。

REQUEST_URI

这是在HTTP请求行中所请求的资源。

REQUEST_FILENAME

这是与请求相匹配的完整的本地文件系统的文件路径名或描述。

[flags]参数详解

“-d”(目录):将TestString视为一个路径名并测试它是否为一个存在的目录。

-f”(常规文件):将TestString视为一个路径名并测试它是否为一个存在的常规文件。

“-s”(非空的常规文件):将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。

“-l”(符号连接):将TestString视为一个路径名并测试它是否为一个存在的符号连接。

“-x”(可执行):将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。

“-F”(对子请求存在的文件):检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

“-U”(对子请求存在的URL):检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

Htaccess常用实例汇总

禁止特定的IP

<Files 403.html>
order allow,deny
allow from all
</Files>
deny from 0.0.0.0

只允许特定的IP访问

order deny,allow
deny from all
allow from 61.228.209.66

防止.htaccess文件被查看

<Files .htaccess>
order allow,deny
deny from all
</Files>

301重定向

RewriteEngine On
RewriteRule ^(.*)$ http://blog.quietguoguo.com.com [R=301,L]

防止别人的域名解析到自己的独立IP

RewriteEngine On
RewriteCond %{HTTP_HOST} !(^www\.yourdomain\.com$) [NC]
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]

资源防盗链

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]

RewriteCond %{HTTP_REFERER} !^$

RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

文章参考:

Apache HTTP 服务器 2.4 文档

站长百科Apache/RewriteRule

正则表达式30分钟入门教程