nginx rewrite重写
引言:Linux rewrite是什么?
Rewrite规则也称为规则重写,主要功能是实现浏览器访问HTTP URL的跳转,其正则表达式基于perl语言。重要用途如下
a、对搜索引擎优化(Search Engine Optimization,SEO)友好,利于搜索引擎抓取网址页面;
b、隐藏网址的URL真实地址,浏览器显示更加完美;
c、网站变更升级,可以基于Rewrite临时重定向到其他页面;
Rewrite配置示例
句法:Syntax: rewrite regex replacement [flag]
默认:Default: –
语境:Context: server,location,if
#用于切换维护页面场景
#rewrite ^(.*)$ /page/maintain.html break;
Rewrite标记Flag
rewrite指令根据表达式来重定向URL,或者修改字符串,可以应用于server,location,if环境下,每行rewrite指令最后跟一个flag标记,支持的flag标记有如下表格所示:
last本条规则匹配完成后,停止匹配,不再匹配后面的规则break本条规则匹配完成后,停止匹配,不再匹配后面的规则redirect返回302临时重定向,地址栏会显示跳转后的地址permanent返回301永久重定向,地址栏会显示跳转后的地址
last与break区别
break 只要匹配到规则,则会去本地配置路径的目录中寻找请求的文件;
而last只要匹配到规则,会对其所在的server(…)标签重新发起请求。
break请求:
1、请求rewrite.drz.com/break
2、首先:会去查找本地的/code/test/index.html;
3、如果找到了,则返回/code/test/index.html的内容;
4、如果没找到该目录则报错404,如果找到该目录没找到对应的文件则403
last请求:
1、请求rewrite.drz.com/last
2、首先:会去查找本地的/code/test/index.html;
3、如果找到了,则返回/code/test/index.html的内容;
4、如果没找到,会对当前server重新的发起一次请求,rewrite.drz.com/test/
5、如果有location匹配上,则直接返回该location的内容。
4、如果也没有location匹配,再返回404;
nginx的rewrite常用规则参考:
-
~ 为区分大小写匹配
-
~* 为不区分大小写匹配
-
!和!*分别为区分大小写不匹配及不区分大小写不匹
-
-f和!-f用来判断是否存在文件
-
-d和!-d用来判断是否存在目录
-
-e和!-e用来判断是否存在文件或目录
-
-x和!-x用来判断文件是否可执行
-
last 相当于Apache里的[L]标记,表示完成rewrite,呵呵这应该是最常用的
-
break 终止匹配, 不再匹配后面的规则
-
redirect 返回302临时重定向 地址栏会显示跳转后的地址
-
permanent 返回301永久重定向 地址栏会显示跳转后的地址