域名跳转概要目录
- 需求,把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>
- mod_rewrite模块,在编译apache的时候用到了一个most,most会把大多数模块编译进来;若是没有用most,没有加任何的编译参数,那mod_rewrite模块也不会出现
- 定义rewrite的条件,主机名(域名)不是111.com知足条件。当域名不是111.com的时候,就会跳转到111.com,也就是说如今以111.com为主域名,它的权重大一点。若是不是 ! 叹号,表示取反的意思。HOST就是定义的域名,111.com就是HOST。!^111.com$,表示以111开头的,到com结尾的,这样定义是为了包含111.com也会匹配
- 这个^/(.)$ 理解为: 非域名之外剩下的部分, / 斜杠表示域名后面的斜杠,(.)就是 / 斜杠后的全部, $表示结束语句
- 凡是以 ^/(.)$ 域名的 都会跳转到 http://111.com/(.)
- 这个 R=301,L 在跳转完成后还须要加一个R=301状态码,L 表示只跳转一次结束
- 301是永久重定向
- 302是临时重定向,临时重定向在搜索引擎不太友好,它会认为仅仅是临时的,不过把原来域名的权重下降
域名重定向实验操做
- 打开虚拟主机配置文件,并修改配置文件
[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>
而后保存退出
- 检测修改的配置文件是否存在语法错误
[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 ~]#
- 在测试前,先检查是否加载了rewrite模块
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
[root@hf-01 ~]#
- 这里会看到并无加载rewrite模块,因此还须要到配置文件中打开rewrite模块
- 若是没有加载,还须要打开rewrite模块,由于在编译的时候指定了most,因此rewrite模块必定存在
[root@hf-01 ~]# vim /usr/local/apache2.4/conf/httpd.conf
搜索/rewrite ,找到这一行,并将前面的# 号去掉
LoadModule rewrite_module modules/mod_rewrite.so
而后保存退出
- 检测修改的配置文件是否存在语法错误,并从新加载配置文件
[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 ~]#
- 再来查看rewrite模块
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
rewrite_module (shared)
[root@hf-01 ~]#
- 查看虚拟主机配置文件
[root@hf-01 ~]# cat /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
- 开始测试
- curl -x能够使用127.0.0.1也能够是192.168.133.130 进行测试,由于80端口监听的是全网 什么是监听全网
- 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 ~]#
- 在虚拟主机中添加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
- 访问2111.com.cn
- curl -x192.168.74.150:80 2111.com.cn -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 ~]#
- 会看到状态码为301
- 查看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 ~]#
- 在域名后面随便添加字符,最后仍是跳转到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 ~]#
- 去访问随便输入字符的网站,会显示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 ~]#