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状态码的作用。
- 而为了解决这种问题,把一个网站A域名跳转到另一个网站B域名上,提升跳转到的那个域名的权重,并且定义一个301的状态码——>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/(.)
- 例如:^/(.*)/([1-9]+)$ 跳转就可以写成 http://111.com/$1/$2
- 这个 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端口监听的是全网 什么是监听全网
- 全网,就是这台主机上所有的网卡的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 ~]#
- 在虚拟主机中添加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
- -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 ~]#
- 【推荐】C#线程篇---Task(任务)和线程池不得不说的秘密(5.2)
- javascript 事件基础
- 算法模板——sap网络最大流 3(递归+邻接矩阵)
- 从Hash Killer I、II、III论字符串哈希
- angularjs 缓存详解
- 算法模板——线段树7(骰子翻转问题)
- 2729: [HNOI2012]排队
- 算法模板——sap网络最大流 2(非递归+邻接表)
- 算法模板——sap网络最大流 1(非递归+邻接矩阵)
- webpack学习(四)extract-text-webpack-plugin插件
- Codevs2822 爱在心中
- 3098: Hash Killer II
- 1380 没有上司的舞会
- HDU1878 欧拉回路
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 达梦数据库启用日志方法,达梦数据库查看日志是否启用,达梦数据库日志文件位置查找
- JavaScript 技术篇 - js 查看哪个元素获取了焦点,js 指定元素获取焦点方法
- 工作10年后,再看String s = new String("xyz") 创建了几个对象?
- Linux达梦数据库:通过disql登录命令行操作数据库,打开达梦数据库自带的数据库管理连接工具
- Dbvis数据库连接工具将查询出数据转化为sql插入语句方法
- JavaScript 技术篇 - js通过xpath路径定位元素方法
- Python+selenium 自动化高级应用篇:借助pyautogui实现web前端带轨迹拖拽功能,解决ActionChains拖拽失效问题
- PG数据库版本查看方法,sql语句查pg数据库版本方法
- Linux下DM达梦数据库导入导出dmp文件实战演示,dexp和dimp命令详细使用方法
- oracle数据库imp导入失败提示:“不是有效的导出文件, 标头验证失败”解决方法,修改dmp文件里oracle数据库版本号方法
- BAT批处理文件无法运行提示“/E /I /Y ‘XCOPY‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”解决方法
- c语言之指针与数组知识点随笔
- Chrome 插件开发-右键菜单开发实战演示,浏览器页面右键菜单选项设置,插件右键菜单点击插件名跳转主页设置
- Chrome 插件开发-桌面通知设置实战演示,设置通知显示、存在时间
- Python 技术篇-通过进程名称、PID杀死windows进程的两种方法,获取当前运行程序的pid