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
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
[root@room9pc01 ~]# 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

 

posted @ 2019-04-29 00:07  安于夏  阅读(161)  评论(0编辑  收藏  举报