首页 > php知识 > URL重定向之RewriteCond 指令

URL重定向之RewriteCond 指令

2010年6月30日 10V 发表评论 阅读评论

RewriteCond 指令是用来定义触发重写的条件的。即在一个RewriteRule指令之前可以有一个或多个RewriteCond指令。条件之后的重写规则仅在当前URI 与Pattern匹配并且满足此处的条件时才会起作用。

RewriteCond指令的语法如下:

RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla.*
RewriteRule  ^/$                 /homepage.max.html  [L]

%{HTTP_USER_AGENT} 此时指的是用户的浏览器标识,上面的转写语句的意思是:当用户的浏览器标识为Mozilla,访问主页的时候,跳转到homepage.max.html页。类似%{HTTP_USER_AGENT}这样的的变量有很多,常用的有%{HTTP_HOST}, %{QUERY_STRING}等等。

注:RewriteCond的第二个参数是一个perl兼容的正则表达式,但是还有若干增补:
1.可以在表达式的开头使用’!'(惊叹号)来指定不匹配。

RewriteCond %{HTTP_HOST}   !^smartwei\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://smartwei.com/$1 [L,R]

将站内所有不适以smartwei.com开头的链接都转化为以http://smartwei.com/开头的形式。

2.除了正则表达式的标准用法,还有下列用法

  • ‘<CondPattern’(词典顺序的小于)

    将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString小于CondPattern则为真。
  • ‘>CondPattern’(词典顺序的大于)

    将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString大于CondPattern则为真。
  • ‘=CondPattern’(词典顺序的等于)

    将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString等于CondPattern(两个字符串逐个字符地完全相等)则为真。如果CondPattern是”"(两个双引号),则TestString将与空字符串进行比较。
  • ‘-d’(目录)

    将TestString视为一个路径名并测试它是否为一个存在的目录。
  • ‘-f’(常规文件)

    将TestString视为一个路径名并测试它是否为一个存在的常规文件。
  • ‘-s’(非空的常规文件)

    将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。
  • ‘-l’(符号连接)

    将TestString视为一个路径名并测试它是否为一个存在的符号连接。
  • ‘-x’(可执行)

    将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。
  • ‘-F’(对子请求存在的文件)

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

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

3.还可以追加特殊的标记[flags]作为RewriteCond指令的第三个参数
[flags]是一个以逗号分隔的以下标记的列表:

  • ‘nocase|NC’(忽略大小写)

    它使测试忽略大小写,扩展后的TestString和CondPattern中’A-Z’ 和’a-z’是没有区别的。此标记仅用于TestString和CondPattern的比较,而对文件系统和子请求的检查不起作用。
  • ‘ornext|OR’(或下一条件)

    它以OR方式组合若干规则的条件,而不是隐含的AND。典型的例子如下:
RewriteCond %{REMOTE_HOST}  ^host1.*  [OR]
RewriteCond %{REMOTE_HOST}  ^host2.*  [OR]
RewriteCond %{REMOTE_HOST}  ^host3.*
RewriteRule ... 针对这3个主机的规则集 ...

如果不用这个标记,你就必须要书写三次条件/规则对。

作者: 石巍
原载: 金步国-Apache模块 mod_rewrite
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/url-write-rewritecond.html

分类: php知识 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.