天天看点

php rewrite 规则,Apache RewriteCond ReWrite规则

Apache通过RewriteCond设置ReWrite规则,可以在httpd.conf配置文件中直接设置rewrite规则,也可以根据需要在网站的.htaccess文件中设置rewrite规则。

RewriteCond 重写规则执行条件

语法:

[php]RewriteCond TestString CondPattern[/php]

生效域:

[php]server config(服务器全局), virtual host(虚拟主机), directory(目录), .htaccess[/php]

上面的 TestString, 可提供反向引用. 引用模式为: %N 其中N为(0 < = N <=9), 引用当前若干RewriteCond条件中最后符合的条件中的分组成分, 也就是括号里的内容.不过用到的不多. 反向应用多在RewriteRule里常用.

RewriteCond 语法中的 TestStrng 为要被检查的内容, CondPattern 是进行匹配的规则, 它是一个兼容Perl风格的正则表达式和一些其他的特有字符属性. 这里介绍一下.

[php]第一个: ! (感叹号) 表示否的意思. 比如一个条件: 判断访问此页面的上一页URL是否包含 sex 字符的话可以用这样: RewriteCond %{HTTP_REFERER} !(sex)

第二个: < 就是小于的意思, TestString < CondPattern.

第三个: > 就是大于于的意思, TestString < CondPattern.

第四个: = 相等的意思. , = 三个和通常程序语言使用的 , = 功能类似.

第五个: -d 是否是一个目录. 判断TestString是否不是一个目录可以这样: !-d

第六个: -f 是否是一个文件. 判断TestString是否不是一个文件可以这样: !-f

第七个: -s 是否是一个正常的有大小的文件. 判断TestString是否不是一个正常的有大小的文件可以这样: !-s

第八个: -l 是否是一个快捷方式文件. 判断TestString是否不是一个快捷方式文件可以这样: !-l

第九个: -x 是否是一个文件并且又执行权限. 判断TestString是否不是一个文件并且又执行权限可以这样: !-x

第十个: -F 检查TestString是否是一个合法的文件,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能。

第十一个: -U 检查TestString是否是一个合法的URL,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能.[/php]

另外RewriteCond 指令后面可带 Flag, 现在只要2个可用, 一个是 NC|nocase, 不区分大小写的意思. 一个是 OR|ornext 表示连接下一个条件的意思.

RewriteCond 实际需要使用情况比如要判断一个条件成真的时候才执行相关的重写操作. 紧接着它下面的 RewriteRule 总是在RewriteCond 条件判断为真的时候才被执行.

看下面的一个例子:

[php]#开启服务器重写模式

RewriteEngine on

#来自 www.opensoce.com 的连接访问本站时都只能访问 test.php 这页.

RewriteCond %{HTTP_REFERER} (a.opensoce.com)

RewriteRule (.*)$ test.php

#来自 www.opensoce.com 的连接访问本站时都只能访问 newTest.php 这页.

RewriteCond %{HTTP_REFERER} (b.opensoce.com)

RewriteRule (.*)$ newTest.php[/php]

RewriteCond其实很简单. 就像程序里的 if() 这样的效果.