nginx rewrite 转发配置_Nginx 转发匹配规则的实现

一、正则表达式匹配

~ 为区分大小写匹配

~* 为不区分大小写匹配

!~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配

二、文件及目录匹配

-f 和 !-f 用来判断是否存在文件

-d 和 !-d 用来判断是否存在目录

-e 和 !-e 用来判断是否存在文件或目录

-x 和 !-x 用来判断文件是否可执行

三.rewrite指令的最后一项参数为flag标记,flag标记有

last 相当于 apache 里面的[L]标记,表示 rewrite。

break 本条规则匹配完成后,终止匹配,不再匹配后面的规则。

redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址。

permanent  返回301永久重定向,浏览器地址会显示跳转后的URL地址。

使用 last 和 break 实现URI重写,浏览器地址栏不变。

而且两者有细微差别,使用alias指令必须用 last标记;使用proxy_pass指令时,需要使用break标记。Last标记在本条rewrite规则执行完毕后,会对其所在server{......}标签重新发起请求,而break标记则在本条规则匹配完成后,终止匹配。

例如:如果我们将类似URL/photo/123456重定向到/path/to/photo/12/1234/123456.png

四、NginxRewrite 规则相关指令

1、break指令

使用环境:server、location、if

该指令的作用是完成当前的规则集,不再处理rewrite指令。

2、if 指令

使用环境:server、location

该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句。If指令不支持嵌套,不支持多个条件&&和||处理。

3、return指令

语法:returncode

使用环境:server、location、if

该指令用于结束规则的执行并返回状态码给客户端。

示例:如果访问的URL以".sh"或".bash"结尾,则返回403状态码

4、rewrite 指令

语法:rewriteregex replacement flag

使用环境:server、location、if

该指令根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句,示例如下:

5、Set指令

语法:setvariable value ;

默认值:none

使用环境:server、location、if

该指令用于定义一个变量,并给变量赋值。变量的值可以为文本、变量以及文本变量的联合。

6、Uninitialized_variable_warn指令

语法:uninitialized_variable_warnon|off

使用环境:http、server、location、if

该指令用于开启和关闭未初始化变量的警告信息,默认值为开启。

五.Nginx的Rewrite规则编写实例

1、当访问的文件和目录不存在时,重定向到某个html文件

2、目录对换 /123456/xxxx  ====>  /xxxx?id=123456

3、如果客户端使用的是IE浏览器,则重定向到/ie目录下

4、禁止访问多个目录

5、禁止访问以/data开头的文件

6、禁止访问以.sh,.flv,.mp3为文件后缀名的文件

7、设置某些类型文件的浏览器缓存时间

8、给favicon.ico和robots.txt设置过期时间

这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志

9、设定某个文件的过期时间;这里为600秒,并不记录访问日志

10、文件反盗链并设置过期时间

这里的return412 为自定义的http状态码,默认为403,方便找出正确的盗链的请求

11、只允许固定ip访问网站,并加上密码

12、将多级目录下的文件转成一个文件,增强seo效果

/job-123-456-789.html指向/job/123/456/789.html

13、文件和目录不存在的时候重定向:

14、将根目录下某个文件夹指向2级目录

如/shanghaijob/ 指向/area/shanghai/

如果你将last改成permanent,那么浏览器地址栏显是/location/shanghai/

上面例子有个问题是访问/shanghai时将不会匹配

这样/shanghai也可以访问了,但页面中的相对链接无法使用,

如./list_1.html真实地址是/area/shanghia/list_1.html会变成/list_1.html,导至无法访问。

那我加上自动跳转也是不行咯

(-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果

知道原因后就好办了,让我手动跳转吧

15、域名跳转

16、多域名转向

六、nginx全局变量

七、Apache和Nginx规则的对应关系

Apache的RewriteCond对应Nginx的if

Apache的RewriteRule对应Nginx的rewrite

Apache的[R]对应Nginx的redirect

Apache的[P]对应Nginx的last

Apache的[R,L]对应Nginx的redirect

Apache的[P,L]对应Nginx的last

Apache的[PT,L]对应Nginx的last

例如:允许指定的域名访问本站,其他的域名一律转向www.zzvips.com

Apache:

Nginx过滤示例:

总结

后端开发是一个最接近全栈的一个职业,前端不够用后端顶上写页面JS,没有运维不要紧后端来维护服务器,总之一个好的后端就是能面面俱到。

到此这篇关于Nginx 转发匹配规则的实现的文章就介绍到这了,更多相关Nginx 转发匹配规则内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.im/post/5e78626ae51d45270c27a66f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值