nginx的location优先级与重定向

news2024/11/28 9:31:48

概念

1.location是Nginx中的块级指令(block directive),,location指令的功能是用来匹配不同的url请求,进而对请求做不同的处理和响应,这其中较难理解的是多个location的匹配顺序。

2.我们输入的网址叫做请求URI,nginx用请求URI与location中配置的URI做匹配。

在http模块有server,在server模块才有location,location(位置)匹配的是uri,uri是IP地址后面的/test  , /image 也就是位置

在一个server当中有多个location,如何来确定匹配哪个location

Nginx的正则表达式

^:字符串的其实位置

$:字符串的结束位置

*:匹配所有

+:匹配前面的字符一次或者多次

?:0次或1次

. :任意单个字符  \.

{n}:连续重复出现n次,要正好等于它

{n,m}:连续重复出现n-m次

[c]: 匹配单个字符c

():分组

|:或

Location匹配的分类:

Location  /

Location  ~*

www . ky32 . com/test{..}

1.精确匹配location = /test{..}

完整的路径,一个字都不能少,也不能错

  1. 正则匹配 location  ~ /{}

Location  ^~ : 前缀匹配,以什么为开头

~:区分大小写进行匹配

~*:不区分大小写进行匹配

!~:区分大小写取反匹配

!~*:不区分大小写取反匹配

  1. location  /test{}

一般匹配

Location 匹配一旦匹配成功,不再向下匹配

Location 匹配的优先级

精确匹配优先级最高 ,其次是正则匹配 ,最后是一般匹配(或者通用)

Location  =  完整路径  >  location ^~ > location  ~ ,~*  >    location /test > location /

工作当中配置loaction的三个原则

1.网站首页:要用精确匹配 ,网站首页一般情况下都是一个静态页面,匹配网站的根工作目录如下

location = / {

}

2.处理静态文件的请求:目录匹配和后缀匹配,会使用正则匹配

Location  ^~ /static {

}

Location ~*\ . {html|jpg|jpeg|gif|png}${

}

3.一般规则(通用匹配):动态请求,把动态请求转发到后端

Location /{

Proxy_pass http://tomcat server

#

}

Nginx 的重定向

Rewrite :结合了nginx提供的全局变量和自己设置自定义的变量,结合正则表达式以及标志位实现url重写以及重定向,

Rewrite执行顺序

  1. 先执行server块里面的rewrite
  2. 执行 location里面定义的rewrite
  3. 选定location 中的rewrite

Rewrite中可以支持if语句,但只有if没有else

Rewrite语法

Rewrite  <regex >  <replacemnet> [flag]

<regex> : 正则表达式

<replacemnet> : 跳转的内容或者路径 ,这个可以自定义

[ flag ]  :  标志位 ,或者叫 “标记”也行

flag标志(标记)位的种类

1.Last(用的比较少)

本条规则匹配完成后,继续向下匹配新的location  URI  规则,可以跳两次或者多次

Rewrite  ky30  k31  last;

Location  /{}

1.1:处理请求时发生了重写或者内部重定向循环,进入无线循环,nginx循环最多可以执行10次,超过10次会报错,500,见下图,如果出现死循环可以把last换成break就行

2.break (用的比较多)

本条规则匹配完之后立即终止,页面内容不变,uri不变,只能跳一次

3.Redirct

临时重定向302  uri的地址会发生变化,uri设置了/test,跳转到了/ky32

4.Permanent

永久重定向 301 uri的地址 会发生变化

搜索引擎的权重

永久重定向会加入搜索引擎的排名

临时不会加搜索引擎的权重

总结rewrite和location都可以跳转,似乎有点相同,但区别在于rewrite是在同一域名之内更改获取资源的路径,location是对路径的访问控制 ,核心区别在于一个对资源控制

基于域名的跳转

www. kgc.com但是公司业务变更,迁移到了新的域名www.benet.com代替,但旧域名名不能废除访问kgc可以跳转到benet.且匹配的uri不能变

  1. 基于ip访问跳转

公司业务新版本上线,用户访问网站统一显示固定的维护页面,只有公司的192.168.233.61可以访问

  1. 基于结尾文件进行跳转.php,php跳转到新的页面

重点核心

Location 匹配的写法

Location  =  /

精确匹配 ,完全匹配优先级最高

location  ^~

Location  ~*

第二优先级

Location   /test

第三优先级

Location   /

第四优先级

Location  是访问控制,匹配到之后不在向下继续匹配

网站的设置location规则

  1. 精确匹配,主要是为了匹配首页
  2. Location 6~location~* 进行指定内容匹配
  3. Location  /主要是为了做反向代理,把动态请求转发给后端服务器

Rewrite

Permanent  : 永久重定向

Redirect : 临时重定向

Break  : 他不仅仅是跳转,跳转之后不再继续匹配,而且不改变uri

Last  :  继续向下匹配,nginx只能循环10次,超过10次报错500

2、localtion 语法

location有两种匹配规则:

  • 匹配URL类型,有四种参数可选,当然也可以不带参数。
    location [ = | ~ | ~* | ^~ ] uri { … }
  • 命名location,用@标识,类似于定于goto语句块。
    location @name { … }

location匹配参数解释:

(1) “=” ,精确匹配

  • 内容要同表达式完全一致才匹配成功
location = /abc/ {
  .....
 }
        
# 只匹配http://abc.com/abc
#http://abc.com/abc [匹配成功]
#http://abc.com/abc/index [匹配失败]

(2) “~”,执行正则匹配,区分大小写。

location ~ /Abc/ {
  .....
}
#http://abc.com/Abc/ [匹配成功]
#http://abc.com/abc/ [匹配失败]

(3)“~*”,执行正则匹配,忽略大小写

location ~* /Abc/ {
  .....
}
# 则会忽略 uri 部分的大小写
#http://abc.com/Abc/ [匹配成功]
#http://abc.com/abc/ [匹配成功]

(4)“^~”,表示普通字符串匹配上以后不再进行正则匹配。

location ^~ /index/ {
  .....
}
#以 /index/ 开头的请求,都会匹配上
#http://abc.com/index/index.page  [匹配成功]
#http://abc.com/error/error.page [匹配失败]

(5)不加任何规则时,默认是大小写敏感,前缀匹配,相当于加了“~”与“^~”

location /index/ {
  ......
}
#http://abc.com/index  [匹配成功]
#http://abc.com/index/index.page  [匹配成功]
#http://abc.com/test/index  [匹配失败]
#http://abc.com/Index  [匹配失败]
# 匹配到所有uri

(6)“@”,nginx内部跳转

location /index/ {
  error_page 404 @index_error;
}
location @index_error {
  .....
}
#以 /index/ 开头的请求,如果链接的状态为 404。则会匹配到 @index_error 这条规则上。

3、location匹配顺序

= > ^~ > ~ | ~* > 最长前缀匹配 > /

序号越小优先级越高

  1. location = # 精准匹配
  • = 匹配优先级最高。一旦匹配成功,则不再查找其他匹配项。
  1. location ^~ # 带参前缀匹配
  • ^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
  1. location ~ # 正则匹配(区分大小写)
  2. location ~* # 正则匹配(不区分大小写)
  3. location /a # 普通前缀匹配,优先级低于带参数前缀匹配。
  4. location / # 任何没有匹配成功的,都会匹配这里处理

举例

location = /  {
#规则A
}

location = /login {
#规则B
}

location ^~ /static/ {
#规则C
}

location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}

location ~* \.png$ {
#规则E
}

location !~ \.xhtml$ {
#规则F
}

location !~* \.xhtml$ {
#规则G
}

location / {
#规则H
}

匹配结果:

访问根目录/, 比如http://localhost/ 将匹配规则A

访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H

访问 http://localhost/static/a.html 将匹配规则C

访问 http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用, 而 http://localhost/static/c.png 则优先匹配到 规则C

访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。

访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到。

访问 http://localhost/qll/id/1111 则最终匹配到规则H,因为以上规则都不匹配。

4、location URI结尾带不带 /

  1. 如果 URI 结构是 https://domain.com/ 的形式,尾部有没有 / 都不会造成重定向。因为浏览器在发起请求的时候,默认加上了 / 。虽然很多浏览器在地址栏里也不会显示 / 。这一点,可以访问百度验证一下。
  2. 如果 URI 的结构是 https://domain.com/some-dir/ 。尾部如果缺少 / 将导致重定向。因为根据约定,URL 尾部的 / 表示目录,没有 / 表示文件。所以访问 /some-dir/ 时,服务器会自动去该目录下找对应的默认文件。如果访问 /some-dir 的话,服务器会先去找 some-dir 文件,找不到的话会将 some-dir 当成目录,重定向到 /some-dir/ ,去该目录下找默认文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1096534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React高级特性之受控和非受控组件

一、受控组件 受控组件&#xff1a;input框自己的状态被React组件状态控制 // 类组件引入React import React from reactclass InputComponent extends React.Component{state {message: zm66666}changeHandler (e) > {this.setState({message: e.target.value})}render…

第五十八章 学习常用技能 - 查看查询缓存

文章目录 第五十八章 学习常用技能 - 查看查询缓存查看查询缓存建立索引使用调谐表工具 第五十八章 学习常用技能 - 查看查询缓存 查看查询缓存 对于 SQL&#xff08;用作嵌入式 SQL 时除外&#xff09;&#xff0c;系统会生成可重用代码来访问数据&#xff0c;并将该代码放置…

二手安捷伦E9323A射频传感器

安捷伦E9323A射频传感器 E9323A 是 Agilent 使用的 6 GHz 0.1 瓦射频传感器。电子测试设备传感器测量波形的功率&#xff0c;例如多音和调制射频 (RF) 波形。传感器使用二极管检测器收集高度精确的调制测量值。 5 MHz 视频带宽&#xff0c;非常适合 W-CDMA 和 cdma2000 应用 通…

机器视觉知识讲的深不如讲的透

我深思这个话题&#xff0c;大家来培训&#xff0c;其实培训机构也很痛苦&#xff0c;每个热掌握的参差不齐&#xff0c;你说他不会吧&#xff0c;会一点电气&#xff0c;你说他会吧&#xff0c;会一点Opencv&#xff0c;会一点visionpro,会一点Visionmaster,会一点Halcon。好像…

LangChain与大型语言模型(LLMs)应用基础教程:神奇的Agent

原文&#xff1a;LangChain与大型语言模型(LLMs)应用基础教程:神奇的Agent-CSDN博客 LangChain是大型语言模型(LLM)的应用框架,LangChain可以直接与 OpenAI 的 text-davinci-003、gpt-3.5-turbo 模型以及 Hugging Face 的各种开源语言模如 Google 的 flan-t5等模型集成。通过使…

c++11新增特性

目录 新增容器 ​编辑 新增语法 变量类型推导 auto 存储类型 分类 自动存储类型 静态存储类型 寄存器存储类型 外部链接存储类型 decltype typeid(c98) type_info { }初始化 initializer_list 介绍 使用 模拟实现 nullptr final与override 范围for 右值…

PVIT:利用位置信息增强多模态模型理解用户意图的能力

论文链接&#xff1a; https://arxiv.org/abs/2308.13437 代码链接&#xff1a; https://github.com/PVIT-official/PVIT Demo&#xff1a; https://huggingface.co/spaces/PVIT/pvit 引言 随着ChatGPT等语言大模型的走红&#xff0c;越来越多人尝试探索为语言大模型赋予视觉能…

中断机制-通过AtomicBoolean实现线程中断停止

通过AutomicBoolean package com.nanjing.gulimall.zhouyimo.test;import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean;/*** author zhou* version 1.0* date 2023/10/15 2:42 下午*/ public class InterruptDemo2 {static AtomicBoole…

分治算法——快排 | 归并思想

文章目录 一、快排思想1. leetcode75. 颜色分类2. leetcode912. 排序数组3. leetcode215. 数组中的第K个最大元素4. leetcode面试题17.14. 最小K个数 二、归并思想1. leetcode912. 排序数组2. leetcodeLCR 170. 交易逆序对的总数3. 计算右侧小于当前元素的个数4. 翻转对 一、快…

GBJ3510-ASEMI电源控制柜专用GBJ3510

编辑&#xff1a;ll GBJ3510-ASEMI电源控制柜专用GBJ3510 型号&#xff1a;GBJ3510 品牌&#xff1a;ASEMI 芯片个数&#xff1a;4 封装&#xff1a;GBJ-4 恢复时间&#xff1a;&#xff1e;50ns 工作温度&#xff1a;-55C~150C 浪涌电流&#xff1a;350A 正向电流&am…

iWall:支持自定义的Mac动态壁纸软件

iWall Mac是一款动态壁纸软件&#xff0c;它可以使用任何格式的漂亮视频&#xff08;无须转换&#xff09;、图片、动画、Flash、gif、swf、程序、网页、网站做为您的动态壁纸、动态桌面&#xff0c;并且可以进行交互。 这款软件功能多、使用简单、体积小巧、不占用资源、运行…

Java每日笔试题错题分析(5)

Java每日笔试题错题分析&#xff08;5&#xff09; 一、错题知识点前瞻第1题第2题第3题第4题第5题第6题第7题 二、错题展示及其解析第1题第2题第3题第4题第5题第6题第7题 一、错题知识点前瞻 第1题 数组的初始化 数组的初始化有两种&#xff0c;分为静态初始化和动态初始化 静…

ai_drive67_基于不确定性的多视图决策融合

论文链接&#xff1a;https://openreview.net/forum?idOOsR8BzCnl5 https://arxiv.org/abs/2102.02051 代码链接&#xff1a;https://github.com/hanmenghan/TMC Zongbo Han, Changqing Zhang, Huazhu Fu, Joey Tianyi Zhou, Trusted Multi-View Classification, Internatio…

动态内存管理改造简易通讯录

动态通讯录 本章内容基于上章内容实现&#xff0c;具体情况若有不清楚&#xff0c;请先查看上一篇文章。 动态通讯录实现了&#xff0c;动态开辟&#xff0c;如果存放满了&#xff0c;再开辟空间进行存储&#xff0c;相对静态更方便一些。 动态通讯录需要改造的地方 我们基于…

Python--比较运算符

比较运算符 特别注意&#xff1a;当我们使用比较运算符对两个变量进行比较时&#xff0c;其返回一个布尔类型的值。 案例&#xff1a;两个数大小的比较 num1 10 num2 20 print(num1 > num2) # False print(num1 < num2) # True print(num1 > num2) # False print…

使用免费云服务器体验

免费的才是最贵的 谈谈使用【三*丰*云*免*费*服务器】的超级后悔体验 你以为开通了就永久免费了&#xff1f;怎么可能&#xff01;&#xff01;&#xff01; 使用方法 第一步&#xff1a;注册&#xff0c;实名认证 实名认证收费0.7 此时可以使用24小时&#xff0c;到期自动…

AI影像修复及图像超分辨率

AI图像修复软件主要包含人脸修复、图像超分等功能。人脸修复功能主要对图像上的人脸进行识别和修复&#xff0c;从模糊、缺损、噪声图像中恢复高质量人脸图像。图像超分功能主要对图像进行超分辨率重建&#xff0c;将低分辨率图像处理为高分辨率图像。 链接&#xff1a;https:…

Linux:基础命令

Linux&#xff1a;基础命令 0. Linux的目录结构1. Linux命令基础格式2. ls命令2.1 隐藏文件、文件夹 3. 相对和绝对路径3.1 特殊路径符 4. mkdir命令4.1 mkdir -p 选项 5. touch 创建文件6. cat命令 查看文件内容 0. Linux的目录结构 /&#xff0c;根目录是最顶级的目录了Linux…

【java学习—七】关键字super(32)

文章目录 1. 功能2. 代码中理解3. super调用父类构造器3.1. 结论一证明3.2. 结论二证明 4. this和super的区别 1. 功能 在 Java 类中使用 super 来调用父类中的指定操作&#xff1a; &#xff08;1&#xff09;super 可用于访问父类中定义的属性 &#xff08;2&#xff09;sup…

unity的脚本执行顺序问题

当一个物体同时挂载有多个脚本时&#xff0c;谁会先执行呢&#xff1f; 猜想&#xff1a;Test2在Test1的上面应该会先执行吧&#xff01; 结果&#xff1a;Test1先执行 如果你想要某一个脚本先执行&#xff0c;可以使用Awake方法 执行顺序 是先把所以脚本的Awake执行完&a…