rewirte地址重寫
地址重寫
調整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
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:";
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
rewrite /a.html /b.html; #只要添加這一行就可以了
}
}
------------------------------------------------------------------------------------
# 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地址重寫