11.19/11.20 域名跳转

时间:2022-04-27
本文章向大家介绍11.19/11.20 域名跳转,主要内容包括域名跳转概要目录、域名跳转、域名跳转配置文件介绍、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

域名跳转概要目录

  • 需求,把123.com域名跳转到www.123.com,配置如下:
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.123.com
    ServerAlias 123.com
    <IfModule mod_rewrite.c> //需要mod_rewrite模块支持
        RewriteEngine on  //打开rewrite功能
        RewriteCond %{HTTP_HOST} !^www.123.com$  //定义rewrite的条件,主机名(域名)不是www.123.com满足条件
        RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行
</IfModule>
</VirtualHost> 
  • /usr/local/apache2/bin/apachectl -M|grep -i rewrite //若无该模块,需要编辑配置文件httpd.conf,删除rewrite_module (shared) 前面的#
  • curl -x127.0.0.1:80 -I 123.com //状态码为301

域名跳转

  • 域名跳转,常用于 老域名跳转到新域名,因为老用户已经习惯记住一个域名了,突然页面换到了新的域名,就需要做这个操作。一个域名就是一个网站的名称,都可以通过域名访问到该网站
  • 因为域名涉及到一个SEO,SEO会对网站的内容进行一个价值权重定义,旧网站价值高,会一直存在各大搜索引擎,会对新网站产生不可预料的影响,所以为了让老用户,和搜索引擎把重心转移到新网站,所以就需要做一个老域名跳转到新域名的操作。
    • SEO涉及到一个排名,网站的排名越高,在搜索引擎排名就越靠前,而这个权重是根据网站的页面数量来判定的,搜索引擎认为该网站比较有价值,就会提升该网站权重,而它判断网站是根据域名来的,在搜索引擎眼里,一个网站是根据域名来判断的。
  • 若一个网站同时有A、B两个域名可以同时访问,那搜索引擎会认为第二个B域名是一个冒牌货,所以搜索引擎会把高权重给第一个A域名,低权重给第二个B域名。
    • 而为了解决这种问题,把一个网站A域名跳转到另一个网站B域名上,提升跳转到的那个域名的权重,并且定义一个301的状态码——>301状态码叫做,永久重定向,永久跳转。
      • 永久跳转,搜索引擎它认为A网站不用了,就可以把A网站的权重降下去,然后把所有权重加到B网站上去,这就是301状态码的作用。

域名跳转配置文件介绍

  • 加入到配置文件的内容
<IfModule mod_rewrite.c> //需要mod_rewrite模块支持
        RewriteEngine on  //打开rewrite功能,on就是打开
        RewriteCond %{HTTP_HOST} !^111.com$  //定义rewrite的条件,主机名(域名)不是111.com满足条件。
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行
</IfModule>
  1. mod_rewrite模块,在编译apache的时候用到了一个most,most会把大多数模块编译进来;如果没有用most,没有加任何的编译参数,那mod_rewrite模块也不会出现
  2. 定义rewrite的条件,主机名(域名)不是111.com满足条件。当域名不是111.com的时候,就会跳转到111.com,也就是说现在以111.com为主域名,它的权重大一点。如果不是 ! 叹号,表示取反的意思。HOST就是定义的域名,111.com就是HOST。!^111.com$,表示以111开头的,到com结尾的,这样定义是为了包含111.com也会匹配
  3. 这个^/(.)$ 理解为: 非域名以外剩下的部分, / 斜杠表示域名后面的斜杠,(.)就是 / 斜杠后的所有, $表示结束语句
  • 凡是以 ^/(.)$ 域名的 都会跳转到 http://111.com/(.)
  • 这个 R=301,L 在跳转完成后还需要加一个R=301状态码,L 表示只跳转一次结束
  • 301是永久重定向
  • 302是临时重定向,临时重定向在搜索引擎不太友好,它会认为仅仅是临时的,不过把原来域名的权重降低

域名重定向实验操作

  1. 打开虚拟主机配置文件,并修改配置文件
[root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

更改前
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias www.abc.com www.123.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    #<Directory /data/wwwroot/111.com> 
    <FilesMatch 123.php>
       AllowOverride AuthConfig 
        AuthName "111.com user auth"
        AuthType Basic 
        AuthUserFile /data/.htpasswd  
        require valid-user
     </FilesMatch>
    #</Directory>
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

更改后
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias www.abc.com www.123.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    #<Directory /data/wwwroot/111.com> 
    #<FilesMatch 123.php>
    #    AllowOverride AuthConfig 
    #    AuthName "111.com user auth"
    #    AuthType Basic 
    #    AuthUserFile /data/.htpasswd  
    #    require valid-user
    # </FilesMatch>
    #</Directory>
<IfModule mod_rewrite.c>
        RewriteEngine on 
        RewriteCond %{HTTP_HOST} !^111.com$  
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] 
</IfModule>
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

然后保存退出
  1. 检测修改的配置文件是否存在语法错误
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
  1. 重新加载配置文件
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 ~]# 
  1. 在测试前,先检查是否加载了rewrite模块
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
[root@hf-01 ~]# 
  1. 这里会看到并没有加载rewrite模块,所以还需要到配置文件中打开rewrite模块
  2. 如果没有加载,还需要打开rewrite模块,因为在编译的时候指定了most,所以rewrite模块一定存在
[root@hf-01 ~]# vim /usr/local/apache2.4/conf/httpd.conf

搜索/rewrite ,找到这一行,并将前面的# 号去掉

LoadModule rewrite_module modules/mod_rewrite.so
然后保存退出
  1. 检测修改的配置文件是否存在语法错误,并重新加载配置文件
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 ~]# 
  1. 再来查看rewrite模块
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
 rewrite_module (shared)
[root@hf-01 ~]# 
  1. 查看虚拟主机配置文件
[root@hf-01 ~]# cat /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  1. 开始测试
  • curl -x可以使用127.0.0.1也可以是192.168.133.130 进行测试,因为80端口监听的是全网 什么是监听全网
    • 全网,就是这台主机上所有的网卡的IP
  • 80端口默认是:::80,表示监听全网
[root@hf-01 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1525/master         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1199/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1525/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      1513/mysqld         
tcp6       0      0 :::80                   :::*                    LISTEN      2586/httpd          
tcp6       0      0 :::22                   :::*                    LISTEN      1199/sshd           
[root@hf-01 ~]# 
  1. 在虚拟主机中添加2111.com.cn ,然后在重新检查语法错误,在加载配置文件
[root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
  1. 访问2111.com.cn
  • curl -x192.168.74.150:80 2111.com.cn -I
    • -I参数,表示不显示内容,只看状态码
[root@hf-01 ~]# curl -x192.168.74.150:80 2111.com.cn -I
HTTP/1.1 301 Moved Permanently
Date: Wed, 20 Dec 2017 23:32:32 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Location: http://111.com/
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 ~]# 
  1. 会看到状态码为301
  2. 查看2111.com.cn网站的内容
[root@hf-01 ~]# curl -x192.168.74.150:80 2111.com.cn
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://111.com/">here</a>.</p>
</body></html>
[root@hf-01 ~]# 
  1. 在域名后面随便添加字符,最后还是跳转到111.com
[root@hf-01 ~]# curl -x192.168.74.150:80 2111.com.cn/saasfagssd -I
HTTP/1.1 301 Moved Permanently
Date: Wed, 20 Dec 2017 23:39:50 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Location: http://111.com/saasfagssd
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 ~]# 
  1. 去访问随便输入字符的网站,会显示404状态码
  • 404状态码,表示这个页面不存在
  • 401状态码,表示用户名密码验证的。如果验证不对,就是401状态码;验证对了,就是200状态码
[root@hf-01 ~]# curl -x192.168.74.150:80 http://111.com/saasfagssd -I
HTTP/1.1 404 Not Found
Date: Wed, 20 Dec 2017 23:42:08 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 ~]#