1. 程式人生 > >rewirte地址重寫

rewirte地址重寫

client 備註 normal 測試 lag NPU 真實機 con edi

地址重寫

調整Nginx服務端配置,實現:
所有訪問a.html的請求,重定向到b.html;
所有訪問192.168.4.5的請求重定向至www.tmooc.cn;
所有訪問192.168.4.5/下面子頁面,重定向至www.tmooc.cn/下相同的頁面;
實現firefox與curl訪問相同頁面文件,返回不同的內容。

關於Nginx服務器的地址重寫,主要用到的配置參數是rewrite:
rewrite regex replacement flag
rewrite 舊地址 新地址 [選項]

地址重寫格式【總結】
rewrite 舊地址 新地址 [選項];
last 不再讀其他rewrite

break 不再讀其他語句,結束請求
redirect 臨時重定向
permament 永久重定向
-------------------------------------------------------------------------------------
步驟一:修改配置文件(訪問a.html重定向到b.html)

1)修改Nginx服務配置:
# vim /usr/local/nginx/conf/nginx.conf
... ...
server {
listen 80;
server_name www.a.com;
#auth_basic "Input Password:";

#auth_basic_user_file "/usr/local/nginx/pass";
#charset koi8-r;

#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
rewrite /a.html /b.html; #只要添加這一行就可以了
}
}
------------------------------------------------------------------------------------

2)創建新頁面
# echo "b.html" > /usr/local/nginx/html/b.html

3)重新加載配置文件
# nginx -s reload

客戶端client測試訪問(仔細觀察瀏覽器地址欄的變化)
# firefox 192.168.4.5/a.html
# firefox www.a.com/a.html

訪問一個不存在的頁面,也不會報錯,而是跳到b.html,因為rewrite支持正則,.在正則表示任意。????這個不太清楚
-------------------------------------------------------------------------------------
步驟二:訪問a.html重定向到b.html(跳轉地址欄)

1)修改Nginx服務配置:
# vim /usr/local/nginx/conf/nginx.conf
... ...
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
rewrite /a.html /b.html redirect; #追加最後一個詞redirect。更改後地址欄會變。
}
}

2)重新加載配置文件
nginx -s reload

3)客戶端client測試(仔細觀察瀏覽器地址欄的變化,訪問www.a.com/a.html自動變成了www.a.com/b.htm)
# firefox http://192.168.4.5/a.html
----------------------------------------------------------------------------------------
步驟三:修改配置文件(訪問192.168.4.5的請求重定向至www.tmooc.cn)

1) 修改Nginx服務配置
# vim /usr/local/nginx/conf/nginx.conf
... ...
server {
listen 80;
server_name www.a.com;
#auth_basic "Input Password:";
#auth_basic_user_file "/usr/local/nginx/pass";
#charset koi8-r;

#access_log logs/host.access.log main;
rewrite ^/ http://www.tmooc.cn/; #添加這行
location / {
root html;
index index.html index.htm;
#rewrite /a.html /b.html redirect; #註釋掉原來的這行
}
}

2)重新加載配置文件
# nginx -s reload

3)真實機測試訪問,真實機才可以連接tmooc,可以看到會自動調轉到tmooc
[[email protected] ~]# firefox 192.168.4.5
-----------------------------------------------------------------------------
步驟四:修改配置文件(訪問192.168.4.5/下面子頁面,重定向至www.tmooc.cn/下相同的頁面)

1) 修改Nginx服務配置
# vim /usr/local/nginx/conf/nginx.conf
... ...
server {
listen 80;
server_name www.a.com;
#auth_basic "Input Password:";
#auth_basic_user_file "/usr/local/nginx/pass";
#charset koi8-r;

#access_log logs/host.access.log main;
rewrite ^/(.*) http://www.tmooc.cn/$1; #修改成這句話,$1在這裏相當於之前的\1,代表之前的變量
location / {
root html;
index index.html index.htm;
#rewrite /a.html /b.html redirect;
}
}

備註:這裏相當於正則表達式裏面的(aaa)(bbb) \1 \2
只不過在nginx這裏,$1 相當於 \1,代表第一個變量。

2)重新加載配置文件
# nginx -s reload

3)真實機測試訪問,只有真實機才可以連接tmooc
# firefox 192.168.4.5/test
客戶端訪問的頁面會自動跳轉成 http://www.tmooc.cn/test

# firefox 192.168.4.5/haha
客戶端訪問的頁面會自動跳轉成 http://www.tmooc.cn/haha
--------------------------------------------------------------------------
步驟五:修改配置文件(實現curl和火狐訪問相同鏈接返回的頁面不同)
1)創建網頁目錄以及對應的頁面文件:

做第1個頁面
# echo "normal" > /usr/local/nginx/html/test.html

做第2個頁面(火狐)
# mkdir -p /usr/local/nginx/html/firefox/
# echo "firefox" > /usr/local/nginx/html/firefox/test.html
-----------------------------------------------------------
2) 修改Nginx服務配置

vim /usr/local/nginx/conf/nginx.conf

server {
listen 80;
server_name www.a.com;
#auth_basic "Input Password:";
#auth_basic_user_file "/usr/local/nginx/pass";
#charset koi8-r;

#access_log logs/host.access.log main;
#rewrite ^/(.*) http://www.tmooc.cn/$1; #註釋掉調轉到tmooc的這一行
location / {
root html;
index index.html index.htm;
#rewrite /a.html /b.html redirect;
}
#識別客戶端firefox瀏覽器。if判斷寫在location括號外。~* firefox之間, ) {之間都要有空格。
#這裏,~符號代表正則匹配,*符號代表不區分大小寫。
if ($http_user_agent ~* firefox) { #添加這3行
rewrite ^/(.*) /firefox/$1;
}
}
-----------------------------------------------------------------------------------------
3)重新加載配置文件
nginx -s reload

客戶端測試
# firefox http://192.168.4.5/test.html #可以看到網頁內容是firefox
# curl http://192.168.4.5/test.html #可以看到命令行輸出信息為normal

rewirte地址重寫