全面理解.htaccess语法中RewriteCond和RewriteRule意义
关于.htaccess伪静态的使用,章郎虫一直没有好好想过。以前一直是在网上找现成的,然后修改下网址实现重定向。今天我专门找资料看了下RewriteCond和RewriteRule的意思及使用方法。然后回过头看《网站地址更改之htaccess和php的301重定向》这篇文章,终于有些理解。现在不用一直找现成的代码,也可以自己写一些规则实现重定向了。下面就简单的介绍下他们的用法。
RewriteCond的语法
RewriteCond TestString CondPattern [Flags]
其中的TestString是指一个文本格式的条件,例子中用的是环境变量名HTTP_HOST所包含的内容(Name= Value),这是一个map(键值对)格式的数据类型。
CondPattern是条件参数,这儿以第一个例子为例,就是abc.com。
Flags标识是是第三个参数,可以用来紧跟下一个条件,这儿用OR表示或者,如果没有[Flags],则用隐含的AND,表示并且。其它的还可以NC等等,表示忽略大小写
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。
RewriteRule的语法
RewriteRule Pattern Substitution [Flags]
其中的Pattern就是参数,一般为一些文件的扩展名,Substitution是用来替换前面用的,这儿的Flags,常用的R表示redirect(强制重定向),F表示forbidden(禁止访问),L表示last(最后),通常当你希望停止重写操作而立即重定向时,可用它。
.htaccess中用到的正则
元字符^(和数字6在同一个键位上的符号)和$都匹配一个位置,这和\b有点类似。
^匹配你要用来查找的字符串的开头
$匹配结尾。
比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$。
如果你对正则表达式不是很明白,可以看下正则表达式的教程。
-
还没有Trackbacks
谢谢分享,很有帮助