Apache中 RewriteCond语句对于我来说一直是个难点
多次试图去把它搞明白
都没有结构
这次我终于算大概知道它的意思了
RewriteCond就像我们程序中的if语句一样表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句这就是RewriteCond最原始基础的功能为了方便理解下面来看看几个例子
复制代码 代码如下:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^Mozilla//
/
*
RewriteRule index
php index
m
php
RewriteCond %{HTTP_USER_AGENT} ^Lynx
*
RewriteRule index
php index
L
php
RewriteRule index
php index
b
php
上 面语句的作用是当你是用FF浏览器访问indexphp这个文件的时候会自动让你访问到indexmphp这个文件当你是用一些移动终端访问的 时候会让你对indexphp这个文件的访问实际访问的是indexLphp去如果你是用其它的浏览器访问的时候会让你跳到 indexbphp在说形象一点上面的语句就等同于程序里面的下面语句(依PHP语句为例):
复制代码 代码如下:
if($_SERVER[
HTTP_USER_AGENT
] ==
Mozilla/
)
{
//跳转到对index
m
php的访问
}
else if($_SERVER[
HTTP_USER_AGENT
] ==
Lynx
)
{
//跳转到对index
L
php的访问
}
else
//跳转到对index
b
php的访问
在看例
RewriteCond %{HTTP_REFERER} (wwwtestcn)
RewriteRule (*)$ testphp
上面语句的作用是如果你访问的上一个页面的主机地址是wwwtestcn则无论你当前访问的是哪个页面都会跳转到对testphp的访问
在看例三
复制代码 代码如下:
RewriteCond %{REMOTE_HOST} ^host
* [OR]
RewriteCond %{REMOTE_HOST} ^host
* [OR]
RewriteCond %{REMOTE_HOST} ^host
*
RewriteRule (
*)$ test
php
上面语句的作用是如果你的地址是host或host或host的时候则就跳到对testphp从这里可以看出RewriteCond语句之间默认的是AND如果想要OR则要明确的写出来
下面是自己收藏的一些有用的重写规则
RewriteCond %{REQUEST_FILENAME} !f //如果文件存在就直接访问文件不进行下面的RewriteRule(不是文件或文件不存在就执行重写)
RewriteCond %{REQUEST_FILENAME} !d //#如果目录存在就直接访问目录不进行RewriteRule
RewriteCond %{REQUEST_URI} !^*(/css|/js|/gif|/png|/jpg|/jpeg)$ //#如果是这些后缀的文件就直接访问文件不进行Rewrite