一 Nginx的location语法

location [=|~|~*|^~] /uri/ { … }
  • =         严格匹配。如果请求匹配这个location,那么将停止搜索并立即处理此请求
  • ~         区分大小写匹配(可用正则表达式)
  • ~*       不区分大小写匹配(可用正则表达式)
  • !~       区分大小写不匹配
  • !~*     不区分大小写不匹配
  • ^~      如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式

示例1:

location  / { }

匹配任意请求

示例2:

location ~* .(gif|jpg|jpeg)$ {
rewrite .(gif|jpg|jpeg)$ /logo.png;

不区分大小写匹配任何以gif、jpg、jpeg结尾的请求,并将该请求重定向到 /logo.png请求

示例3:

location ~ ^.+\.txt$ {
root /usr/local/nginx/html/;
}

区分大小写匹配以.txt结尾的请求,并设置此location的路径是/usr/local/nginx/html/。也就是以.txt结尾的请求将访问/usr/local/nginx/html/ 路径下的txt文件

二 alias与root的区别

  • root    实际访问文件路径会拼接URL中的路径
  • alias   实际访问文件路径不会拼接URL中的路径

示例如下:

location ^~ /sta/ {
alias /usr/local/nginx/html/static/;
}
  • 请求:http://test.com/sta/sta1.html
  • 实际访问:/usr/local/nginx/html/static/sta1.html 文件
location ^~ /tea/ {
root /usr/local/nginx/html/;
}
  • 请求:http://test.com/tea/tea1.html
  • 实际访问:/usr/local/nginx/html/tea/tea1.html 文件

三 last 和 break关键字的区别

(1)last 和 break 当出现在location 之外时,两者的作用是一致的没有任何差异

(2)last 和 break 当出现在location 内部时:

  • last        使用了last 指令,rewrite 后会跳出location 作用域,重新开始再走一次刚才的行为
  • break    使用了break 指令,rewrite后不会跳出location 作用域,它的生命也在这个location中终结

四 permanent 和 redirect关键字的区别

  • rewrite … permanent   永久性重定向,请求日志中的状态码为301
  • rewrite … redirect         临时重定向,请求日志中的状态码为302

五 综合实例

将符合某个正则表达式的URL重定向到一个固定页面

比如:我们需要将符合“/test/(\d+)/[\w-\.]+” 这个正则表达式的URL重定向到一个固定的页面。符合这个正则表达式的页面可能是:http://test.com/test/12345/abc122.html、http://test.com/test/456/11111cccc.js等

从上面的介绍可以看出,这里可以使用rewrite重定向或者alias关键字来达到我们的目的。因此,这里可以这样做:

(1)使用rewrite关键字:

location ~ ^.+\.txt$ {
root /usr/local/nginx/html/;
} location ~* ^/test/(\d+)/[\w-\.]+$ {
rewrite ^/test/(\d+)/[\w-\.]+$ /testpage.txt last;
}

这里将所有符合条件的URL(PS:不区分大小写)都重定向到/testpage.txt请求,也就是 /usr/local/nginx/html/testpage.txt 文件

(2)使用alias关键字:

location ~* ^/test/(\d+)/[\w-\.]+$ {
alias /usr/local/nginx/html/static/sta1.html;
}

这里将所有符合条件的URL(PS:不区分大小写)都重定向到/usr/local/nginx/html/static/sta1.html 文件

参考:

 转自:https://www.zifangsky.cn/828.html

Nginx的location匹配规则的更多相关文章

  1. Nginx之location 匹配规则详解

    有些童鞋的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我,因为按“先匹配普通, ...

  2. Nginx之Location匹配规则

    概述 经过多年发展,nginx凭借其优异的性能征服了互联网界,成为了各个互联网公司架构设计中不可获取的要素.Nginx是一门大学问,但是对于Web开发者来说,最重要的是需要能捋的清楚Nginx的请求路 ...

  3. nginx中location匹配规则介绍

    一,匹配规则 1,= 表示精确匹配 例子:http://localhost/  将匹配到 location = / {...} http://localhost/aaa  可以匹配到 location ...

  4. 前端开发掌握nginx常用功能之server&location匹配规则

    nginx主要是公司运维同学必须掌握的知识,涉及到反向代理.负载均衡等服务器配置.前端开发尤其是纯前端开发来说对nginx接触的并不多,但是在一些情况下,nginx还是需要前端自己来搞:例如我们公司的 ...

  5. nginx多虚拟主机优先级location匹配规则及tryfiles的使用

    nginx多虚拟主机优先级location匹配规则及tryfiles的使用 .相同server_name多个虚拟主机优先级访问 .location匹配优先级 .try_files使用 .nginx的a ...

  6. location 匹配规则 (NGINX)

    转:https://moonbingbing.gitbooks.io/openresty-best-practices/ngx/nginx_local_pcre.html location 匹配规则 ...

  7. nginx教程1:location 匹配规则

    worker_process # 表示工作进程的数量,一般设置为cpu的核数 worker_connections # 表示每个工作进程的最大连接数 server{} # 块定义了虚拟主机 liste ...

  8. Nginx日志参数、location匹配规则、设置密码

    1.三个参数 a)$http_referer:记录此次请求是从哪个链接访问过来的: 是直接访问,还是从其他网站跳转过来的. 例如:访问:http://www.etiantian.com/,其页面首页是 ...

  9. Nginx的alias与root的用法区别和location匹配规则

    1.alias与root的用法区别 最基本的区别:alias指定的目录是准确的,root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录. location /abc/ { ...

随机推荐

  1. js异步梳理:1.从浏览器的多进程到JS的单线程,理解JS运行机制

    大家很早就知道JS是一门单线程的语言.但是也时不时的会看到进程这个词.首先简单区分下线程和进程的概念 1. 简单理解进程 - 进程是一个工厂,工厂有它的独立资源 - 工厂之间相互独立 - 线程是工厂中 ...

  2. python 数据结构之二叉树

    二叉树关键在构建和遍历,python实现相对简单,我们在实现需要用到类,分别设置爱左右子树,根节点,然后从根进行遍历,进行判断,若为空进行树的构建,非空则返回到列表中即可,我在进行遍历时产生了一个错误 ...

  3. Cisco 12系列 AP 初始化配置-1-安装IOS

    12系列AP虽然已经淘汰了,但是像我们这种没钱的公司用了10年却还是在用,好在它还有学习的价值,还是可以从12系列AP看出一些思科部署无线的思路吧. 首先吐槽一下国内常说的胖.瘦AP的这种说法,因为用 ...

  4. Django之模板2

    模板2 一 . 母版 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  5. Redis自学笔记:3.1入门-热身

    第3章:入门 3.1热身 获取符合规则的键名列表:keys 匹配key 表3-1 glob风格通配符规则 符号 含义 ? 匹配一个字符 * 匹配任意个(包括0个)字符 [ ] 匹配括号间的任一字符,可 ...

  6. git 命令的使用

    hello git 穿越时空 修改一条数据 git status 查看是否修改 git diff file1 如何修改的 git add file1 git commit -m "提交的信息 ...

  7. linux环境下mongodb启动操作

    pkill mongod 进入mongo shell :运行 db.shutdownServer() 1.进入mongo的shell  : mongo --port 1008 2.进入bin目录下 m ...

  8. VS2013配置OPENCV2.4.9

    转载自->这里 设置opencv SDK解压目录,点击Extract后解压 我是习惯于解压到这个位置的. 解压过程如上图. 2.         文件目录介绍 解压后会在目录下生成opencv的 ...

  9. Mysql中大数据类型的存取

    标准SQL中提供了八种大数据类型 上面四种是针对字节数据(二进制字符串类型,主要存储图片.音频信息等),下面四种是针对字符数据(非二进制字符串类型,纯文本文件). MySql中不使用标准SQL中针对字 ...

  10. (转)JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...