Rewrite功功能是Nginx做事器供应的一个主要功能。
险些是所有的web产品必备技能,用于实现URL重写
URL重写是非常有用的功能,比如它可以在我们在改变网站构造后,不须要客户端修正原来的书签,也不须要其他网站修正对我们网站的交情链接,还可以在一定程度长进步网站的安全性,能够让我们的网站显得更专业。

2 运用处景

域名变更 (京东)

用户跳转 (从某个连接跳到另一个连接)

phpapacheurl重写nginx7URL重写 NoSQL

伪静态场景 (便于CDN缓存动态页面数据)

3 URL重写事理

4 URL重写

URL 模块语法

set 设置变量if 卖力语句中的判断return 返回返回值或URLbreak 终止后续的rewrite规则rewrite 重定向URL

set指令 自定义变量

Syntax: set $variable value;

Default: —

Context: server, location, if

将http://www.a.com 重写为 http://www.a.com/hellolocation / { set $name hello; rewrite ^(.)$ http://www.a.com/$name; }重启nginx做事测试机打开浏览器可以看到页面跳转

if 指令 卖力判断

Syntax: if (condition) { ... }

Default: —

Context: server, location

条件匹配

#模糊匹配 ~匹配 !~不匹配 ~ 不区分大小写的匹配

#精确匹配 = !=

location / { root html; index index.html index.htm; if ($http_user_agent ~ 'Firefox') { return 403; } }重启nginx客户机打开火狐浏览器测试,看看能否看到403

return 指令 定义返回数据

Syntax: return code [text];

return code URL;

return URL;

Default: —

Context: server, location, if

location / { root html; index index.html index.htm; if ($http_user_agent ~ 'Firefox') { return 403; } }

rewrite指令 实现重写url

rewrite [flag];

关键字 正则 替代内容 flag标记

flag:

last #本条规则匹配完成后,连续向下匹配新的location URI规则break #本条规则匹配完成即终止,不再匹配后面的任何规则redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

permanent标志:永久重定向

域名跳转www.a.com 重写为 www.b.comserver { listen 80; server_name www.a.com; location / { rewrite ^/$ http://www.b.com permanent; }}

redirect标志:临时重定向

域名跳转www.a.com 重写为 www.b.comserver { listen 80; server_name www.a.com; location / { rewrite ^/$ http://www.b.com redirect; }}

break标志: 类似临时重定向

域名跳转www.a.com 重写为 www.b.comserver { listen 80; server_name www.a.com; location / { rewrite ^/$ http://www.b.com break; }}

last标志:

url重写后,立时发起一个新的要求,再次进入server块,重试location匹配,超过10次匹配不到报500缺点,地址栏url不变

last 一样平常涌如今server或if中

根据用户浏览看重写访问目录

如果是firefox浏览器 就将 http://192.168.11.16/$URI 重写为 http://192.168.11.16/firefox/$URI实现 步骤1)URL重写2)要求转给本机locationlocation / {.....if ($http_user_agent ~ 'firefox'){ #^ 以什么开头 ^a #$ 以什么结尾 c$ #. 除了回车以外的任意一个字符 # 前面的字符可以涌现多次或者不涌现 #更多内容看正则表达式 rewrite ^(.)$ /firefox/$1 last; } location /firefox { root html ; index index.html; }}[root@localhost html]# pwd/usr/local/nginx/html[root@localhost html]# mkdir firefox[root@localhost html]# echo firefox > firefox/index.html[root@localhost html]# killall nginx[root@localhost html]# /usr/local/nginx/sbin/nginx 客户机浏览器测试总结

URL重写先容

运用处景

URL重写事理

URL重写实现

重点:什么是URL重写,URL重写的浸染及实现

难点:URL重写如何实现,各标志的含义