今天是: 收藏本站 设为主页
网站首页 >  技术专栏  >  apache  > 

Apache Rewrite实现URL的跳转和域名跳转

日期:2011-10-11  点击率:4512


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.domain.cn和202.91.246.20都跳 转到主机前缀为http://www.domain.cn, 避免相同内容的网页有多个指向的域名,如http://domain.cn。

NameVirtualHost 202.91.246.20:80
ServerAdmin slj@kiya.cn
DocumentRoot “/web”
ServerName domain.cn

RewriteEngine on #打开rewirte功能
RewriteCond %{HTTP_HOST} !^www.domain.cn [NC] #声明Client请求的主机中前缀不是www.domain.cn, 其中 [NC] 的意思是忽略大小写
RewriteCond %{HTTP_HOST} !^202.91.246.20 [NC] #声明Client请求的主机中前缀不是202.91.246.20,其中 [NC] 的意思是忽略大小写
RewriteCond %{HTTP_HOST} !^$ #声明Client请求的主机中前缀不为空
RewriteRule ^(.*) http://www.kiya.cn/ [L] #含义是如果Client请求的主机中的前缀符合上述条件,则直接进行跳转到http://www.kiya.cn/,[L]意味着立即停止重写操作,并 不再应用其他重写规则。这里的.*是指匹配所有URL中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.就是引用前面里的 (.*)字符。




下一篇:详细分析Linux系统下du命令的使用   上一篇:PHP用CURL伪造IP和来源