域名跳轉概要目錄
- 需求,把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 ~]#