Apache域名301跳转

首先,我们来了解一下什么是域名跳转:

按自己的理解来说,就是你有多个域名,想指向一台服务器,使用一个服务器的资源

再形象一点,就是你A和B是两家人,吃饭的时候肯定是各回各家啦,于是服务器看了看A,说:"我认识你小子,你的家在X区域",看了看B说:"我也认识你小子你的家在Y区域",于是他们各自回到家中去吃饭。

但是如果A和B是一家人,是兄弟,虽然长得不一样(排除隔壁老王的嫌疑),但是还是要回到一家去吃点饭的。于是B就设置了一个301跳转,指向了A的家。

举个栗子:www.baidu.com/www.baidu.cn/www.baidu.xin等,访问的都是百度


对于我们的Apache来讲,配置域名跳转很简单,跟着KK来学习一下,康忙北鼻!

第一步:打开Apache的rewrite模块

vim /usr/local/apache2/conf/httpd.conf

在57行的地方找到如下内容

LoadModule rewrite_module modules/mod_rewrite.so

取消模块的注释符#,保证模块是被加载的状态

第二步:对相应的虚拟主机进行域名跳转301配置

vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

    RewriteEngine on

    RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]

    RewriteCond %{HTTP_HOST} ^www.bbb.com$

    RewriteRule ^/(.*)$ http://www.google.hk/$1  [R=301,L]



        其实RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句

%{HTTP_HOST}    是指环境变量:

其他的环境变量:

HTTP_USER_AGENT   用的啥服务器

HTTP_REFERER          从哪跳过来的(上一个网页是什么)

HTTP_COOKIE             

HTTP_FORWARDED

HTTP_HOST                 跳到了哪(www.baidu.com/tmp/1.php,这里只要www.baidu.com)

HTTP_PROXY_CONNECTION

HTTP_ACCEPT

^www.aaa.com$是正则表达式,代表网址是www.aaa.com

[OR]代表或则的意思,默认情况下多条RewriteCond语句中间是使用AND连接的,如果要使用或[OR],要明确指出来。

RewriteRule ^/(.*)$ http://www.google.hk/$1 指要重写的规则是什么,这里小括号括起来的部分被后面的$1引用,如果有第二个被小括号,可以用$2引用,这句话的意思是,请求www.aaa.com/****的任何网址,都会被重定向到www.google.hk/****下


其他一些符号的意义:

[R]    强制外部重定向

[F]    禁用url返回403

[P]    强制使用代理转发

[G]    强制URL为GONE,返回410HTTP状态码

[L]    表明当前规则是最后一条规则,停止分析以后规则的重写

[N]    重新从第一条规则开始运行重写过程

[NC]  不区分大小写

[PT]  传递给下一个处理


第三步:重启服务器

/usr/local/apache2/bin/apachectl restart

至此,跳转就配置完成了


小贴士:

其实我搜索了好久,但是真正详细讲301跳转的,真没几个,希望以后有机会可以更加深入的学习,有错误的话,还是希望各位大佬指出来哈。


最后的最后,奉上几个觉得有用的东东:

RewriteCond %{REQUEST_FILENAME} !-f  //如果文件存在,就直接访问文件,不进行下面的RewriteRule.(不是文件或文件不存在就执行重写)

RewriteCond %{REQUEST_FILENAME} !-d   //#如果目录存在就直接访问目录不进行RewriteRule

RewriteCond %{REQUEST_URI} !^.*(/.css|/.js|/.gif|/.png|/.jpg|/.jpeg)$ //#如果是这些后缀的文件,就直接访问文件,不进行Rewrite

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