3 Nginx地址重写_html

3 Nginx地址重写

1 Nginx地址重写

  • 什么是地址重写
  • 获得一个来访的URL请求,然后改写成服务器可以处理的另一个URL
  • 地址重写的好处
  • 缩短URL,隐藏实际路径提高安全性
  • 易于用户记忆和键入
  • 易于被搜索引擎收录
  • 地址重写语法结构
  • rewrite语句
  • rewrite regex replacement flag
  • rewrite 旧地址 新地址 [选项]
  • flag : break 、 last 、 redirect 、 permanent
  • break : 停止执行其他的重写规则,完成本次请求
  • last : 停止执行其他重写规则,地址栏不改变
  • redirect : 302临时重定向,地址栏改变,爬虫不更新URL
  • permanent : 301永久重定向,地址栏改变,爬虫更新URL
  • 地址重写的选项
  • last选项
    打开nginx主配置文件,将之前的地址重写语句删除,在原位置替换为以下内容,last可以实现不再读取后面rewrite语句的效果
    rewrite /a.html /b.html last; 不加last,用户访问a页面看到的是c页面,加了的话只能看到b页面
    rewrite /b.html /c.html;
    sbin/nginx -s reload 重置nginx服务
    curl 192.168.2.5/a.html 访问a页面看到的是c页面,因为rewrite语句可以持续匹配并重写
  • break选项
    可以再次修改配置文件,将rewrite分别写到2个不同的location语句中(location语句可以实现如果用户访问的是什么页面,就执行后面大括号里面的任务),可以发现last语句失效,但如果改为break则可以在执行第一个rewrite语句后不再读取后面的语句。
    location / { 这里是默认的location
    rewrite /a.html /b.html break; 这里的last改成break
    root html;
    index index.html index.htm;
    }
    location /b.html { 这里创建的新location,如果用户访问的是b页面,就去执行大括号中任务
    rewrite /b.html /c.html;
    }

2 基本功能测试

  • 应用实例
  • 访问 a.html 页面看到的是 b.html
[root@proxy ~]# cp /usr/local/nginx/conf/nginx.conf.default /usr/local/nginx/conf/nginx.conf
#还原nginx配置

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
[root@proxy ~]# sed -n '40p' /usr/local/nginx/conf/nginx.conf
rewrite /a.html /b.html;

[root@proxy ~]# echo proxy_a > /usr/local/nginx/html/a.html
[root@proxy ~]# echo proxy_b > /usr/local/nginx/html/b.html
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

[root@proxy ~]# curl 192.168.2.5/a.html

3 重定向测试

再修改主配置文件,添加redirect选项

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
rewrite ^/a.html$ /b.html redirect;
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

4 测试不同网站间的跳转

  • 并可以保留访问的页面
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
rewrite ^/(.*) http://www.tmooc.cn/$1;
# 其中小括号表示保留(复制),后面的$1表示粘贴
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

使用火狐访问192.168.2.5/a.html可以跳转到http://www.tmooc.cn/a.html

5 测试用户不同环境得到不同页面

准备两个页面

1套给火狐浏览器,另1套给curl

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
if ($http_user_agent ~* firefox) { #如果用户浏览器是火狐
rewrite ^(.*)$ /firefox/$1; #就跳转到火狐专用页面
}
# $http_user_agent 是nginx的内置变量,里面包含了用户的浏览器等环境信息
# 首先修改主配置文件,可以将之前的rewrite语句删除,再原位置添加以下内容
# ~是可以使用正则表达式来匹配被搜索内容,*是忽略大小写

[root@proxy ~]# mkdir /usr/local/nginx/html/firefox
[root@proxy ~]# echo firefox_web > /usr/local/nginx/html/firefox/a.html
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
  • 火狐浏览器访问http://192.168.2.5/a.html
  • curl 192.168.2.5/a.html

3 Nginx地址重写_html_02


3 Nginx地址重写_linux_03