浅析Apache中RewriteCond规则参数的详细介绍

2015-01-24信息快讯网

Apache中 RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了

RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。
RewriteEngine on
RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla//5/.0.*
RewriteRule  index.php            index.m.php
RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.*
RewriteRule  index.php            index.L.php 
RewriteRule  index.php            index.b.php

上面语句的作用是当你是用FF浏览器访问index.php这个文件的时候,会自动让你访问到index.m.php这个文件,当你是用一些移动终端访问的 时候,会让你对index.php这个文件的访问实际访问的是index.L.php去,如果你是用其它的浏览器访问的时候,会让你跳到 index.b.php。在说形象一点,上面的语句就等同于程序里面的下面语句(依PHP语句为例):
if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0')
{
//跳转到对index.m.php的访问
}
else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx')
{
//跳转到对index.L.php的访问
}
else
//跳转到对index.b.php的访问

在看例2:
RewriteCond %{HTTP_REFERER} (www.test.cn)
RewriteRule (.*)$ test.php
上面语句的作用是如果你访问的上一个页面的主机地址是www.test.cn,则无论你当前访问的是哪个页面,都会跳转到对test.php的访问。
在看例三:
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
RewriteCond %{REMOTE_HOST} ^host3.*
RewriteRule (.*)$ test.php

上面语句的作用是如果你的地址是host1或host2或host3的时候,则就跳到对test.php。从这里可以看出,RewriteCond语句之间默认的是AND,如果想要OR,则要明确的写出来。
下面是自己收藏的一些有用的重写规则:
RewriteCond %{REQUEST_FILENAME} !-f   //如果文件存在,就直接访问文件,不进行下面的RewriteRule.(不是文件或文件不存在就执行重写)
RewriteCond %{REQUEST_FILENAME} !-d   //#如果目录存在就直接访问目录不进行RewriteRule
RewriteCond %{REQUEST_URI} !^.*(/.css|/.js|/.gif|/.png|/.jpg|/.jpeg)$ //#如果是这些后缀的文件,就直接访问文件,不进行Rewrite
PHP fopen()和 file_get_contents()应用与差异介绍
zf框架的db类select查询器join链表使用示例(zend框架)
zf框架的zend_cache缓存使用方法(zend框架)
zf框架的registry(注册表)使用示例
zf框架的Filter过滤器使用示例
使用PHP导出Redis数据到另一个Redis中的代码
CodeIgniter框架中_remap()使用方法2例
php function用法如何递归及return和echo区别
解决Codeigniter不能上传rar和zip压缩包问题
php处理restful请求的路由类分享
php $_SERVER windows系统与linux系统下的区别说明
php中的filesystem文件系统函数介绍及使用示例
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
修改apache配置文件去除thinkphp url中的index.php
从PHP $_SERVER相关参数判断是否支持Rewrite模块
如何在Ubuntu下启动Apache的Rewrite功能
深入解析php中的foreach问题
浅析关于PHP位运算的简单权限设计
浅析php面向对象public private protected 访问修饰符
php小经验:解析preg_match与preg_match_all 函数
解析php session_set_save_handler 函数的用法(mysql)
php setcookie(name, value, expires, path, domain, secure) 参数详解
浅析memcache启动以及telnet命令详解
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
关于使用key/value数据库redis和TTSERVER的心得体会
zend Framework中的Layout(模块化得布局)详解
解析在zend Farmework下如何创立一个FORM表单
解析zend Framework如何自动加载类
解析file_get_contents模仿浏览器头(user_agent)获取数据
领悟php接口中interface存在的意义
php 在windows下配置虚拟目录的方法介绍
如何在smarty中增加类似foreach的功能自动加载数据
深入file_get_contents与curl函数的详解
浅谈apache和nginx的rewrite的区别
©2014-2024 dbsqp.com