Apache Rewrite 规则跳转常见配置
1、Rewrite规则简介:?
Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。?
基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。?
基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。
2、举例说明:?
例一.下面是在一个虚拟主机里定义的规则。功能是把client请求的主机前缀不是www.alibaba.cn和70.40.213.183都跳转到主机前缀为,避免相同内容的网页有多个指向的域名,如。
2.用 来访问 的功能
写道RewriteEngine On例子2:
冒号问题。
假如:我们的url有冒号,这就比较痛苦了。通常的url跳转整个匹配遇到冒号是会有问题的。因为我们的url含有冒号开头。这个时候就需要采用rewritecond进行匹配。
写道RewriteCond %{QUERY_STRING} ^action=mcweb\:(.*)?Apache的跳转如果不加任何说明他会把匹配到的字符串后面的参数全部加到新跳转的URL上面。比如上面,所有跳转到mcweb/contact.htm这个链接问号后面的参数和
RewriteCond %{QUERY_STRING} ^action=mcweb\:-( .*)
?进行匹配,如果发现雷同,则跳转到message.alibaba.com/msgsend/contact.htm?action= 的后面%1就是匹配到的之后相同的字符串。如果有多个则多来几个(.*) %n就可以了
Apache的rewrite跳转还有先后顺序,如果我想^/mcweb/contact.htm(.*)$包含mcweb在内的所有访问contact.htm全部跳转到/msgsend/contact.htm? 同时所有的action=mcweb: 这样的url也都跳转到
?如果我们匹配的时候只需要匹配冒号:那就比较简单了
写道RewriteRule ^wiki/(.*:.*) wiki/index.php?title=$1 [L]