RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,


这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。


(一) 重写规则的定义和语法


<IfModule mod_rewrite.c>


    <IfModule mod_negotiation.c>


        Options -MultiViews


    </IfModule>



    RewriteEngine On



    # Redirect Trailing Slashes...


# [L]意味着立即停 止重写操作  .* 是指匹配所有URL中不包含换行字符 R[=code](force redirect) 强制外部重定向


    RewriteRule ^(.*)/$ /$1 [L,R=301]



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


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


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


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


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


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


#'-U'(对子请求存在的URL)



    # Handle Front Controller...


    RewriteCond %{REQUEST_FILENAME} !-d


    RewriteCond %{REQUEST_FILENAME} !-f


#    RewriteRule ^ index.php  [L]



#   RewriteRule  ^(.*)$ test.php


#    如果上面的条件成立的话, index.php 就变成"" 空,也就是说把index.php 隐藏掉,哈哈


#    RewriteRule (.*)$ test.php     //  如果以上的结果成立,链接直接跳转到test.php




#    RewriteCond %{REQUEST_FILENAME} !-f   //如果文件存在,就直接访问文件,不进行下面的RewriteRule.(不是文件或文件不存在就执行重写)


#    RewriteCond %{REQUEST_FILENAME} !-d   //#如果目录存在就直接访问目录不进行RewriteRule


#    RewriteCond %{REQUEST_URI} !^.*(.css|.js|.gif|.png|.jpg|.jpeg)$ //#如果是这些后缀的文件,就直接访问文件,不进行Rewrite



</IfModule>



(二)重写规则的应用


#ci 框架隐藏index.php 方式


#RewriteEngine on


#RewriteCond $1 !^(index\.php|images|robots\.txt)


#RewriteRule ^(.*)$ /index.php/$1 [L]


#   ^(.*)$ 表示匹配任意的字符串 或网址


#  RewriteRule  ^(.*)$ index.php/$1   注意 ^(.*)$  -> index.php/$1  意思为 任意网址重新route到 index.php开头的,$i的意思表示 ^(.*)


# http://www.baidu.com/1/2/3  --->改成文档路由   http://www.baidu.com/index.php/1/2/3


#应用替换时,前面第一个()中匹配的内容后面就用$1引用,第二个()中匹配的就用$2应用…