apache域名跳转

一个站点难免会有多个域名,而多个域名总得有一个主次!譬如说有两个网站www.test2.com和www.abc.com,我们运行时不管是用那一个总会跳转到www.test2.com上,那么这个行为就叫作域名跳转!

以apache为例说明怎么设置一个域名跳转:

基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能,否则virtualhost里没有RewriteEngine on它里面的规则也不会生效!

设置一个域名301跳转,使www.abc.com跳转到www.test2.com

在虚拟主机中加入以下配置:
<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www.abcde.com$
        RewriteRule ^/(.*)$ http://www.test2.com/$1 [R=301,L]
   </IfModule>

然后检查下看是否有错误:

[root@nulifendou ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK

若出现 Syntax OK,则表示未出现错误。然后重启,在浏览器里实验:

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

设置多个域名的跳转:

<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www.abcde.com[OR]//or表示或者的意思,如果不加则是且的意思!  
        RewriteCond %{HTTP_HOST} ^www.abc.com$
        RewriteRule ^/(.*)$ http://www.test2.com/$1 [R=301,L]
   </IfModule>

Apache Rewrite规则修正符
1) R 强制外部重定向
2) F 禁用URL,返回403HTTP状态码。
3) G 强制URL为GONE,返回410HTTP状态码。
4) P 强制使用代理转发。
5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。
6) N 重新从第一条规则开始运行重写过程。
7) C 与下一条规则关联

如果规则匹配则正常处理,以下修正符无效

8) T=MIME-type(force MIME type) 强制MIME类型
9) NS 只用于不是内部子请求
10) NC 不区分大小写
11) QSA 追加请求字符串
12) NE 不在输出转义特殊字符 \%3d$1 等价于 =$1 

你可能感兴趣的:(apache域名跳转)