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]
文章参考: